2012-11-02 17 views
78

Ciao, ho un problema esasperante.Django Reverse con argomenti '()' e argomenti parola chiave '{}' non trovati

Ho un modello URL come questo:

# mproject/myapp.urls.py 

url(r'^project/(?P<project_id>\d+)/$','user_profile.views.EditProject',name='edit_project'), 

funziona benissimo nel browser, ma per il test, quando faccio questo nella shell:

from django.test import Client 
from django.core.urlresolvers import reverse 

client= Client() 
response = client.get(reverse('edit_project'), project_id=4) 

ottengo la temuta:

NoReverseMatch: Reverse for 'edit_project' with arguments '()' and keyword arguments '{}' not found. 

Cosa mi manca qui?

risposta

147

devi specificare project_id:

reverse('edit_project', kwargs={'project_id':4}) 

Doc here

+0

Grande. Grazie. devo aver provato ogni configurazione tranne che uno! –

+0

Potresti Po includi anche come farlo all'interno di un modello? –

+1

[documenti] (https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#url) hanno esempi – miki725

1

Questo problema mi ha dato grande mal di testa quando ho provato ad usare inversa per la generazione di link di attivazione e inviarlo via e-mail, naturalmente. Quindi penso che da tests.py sarà lo stesso. Il modo corretto per farlo è la seguente:

from django.test import Client 
from django.core.urlresolvers import reverse 

#app name - name of the app where the url is defined 
client= Client() 
response = client.get(reverse('app_name:edit_project'), project_id=4) 
+0

Ho appena provato questo, non funziona. @ la risposta di miki725 è corretta. –

+1

Credo che una parentesi graffa sia nel posto sbagliato: response = client.get (reverse ('edit_project', project_id = 4)) –

-2

Il 'app_name' è lo spazio dei nomi che avete dato al config URL, e non effettivo nome del app.

Il modo corretto sarebbe aggiungere un parametro aggiuntivo al proprio url config - 'namespace' questo sarebbe effettivo il 'nome_app' che è stato menzionato user2517191 e 'edit_project' in client.get (reverse ('nome app: edit_project') sarebbe il parametro nome assegnato alla configurazione URL.

Problemi correlati