Django Reverse con argomenti '()' e argomenti per parole chiave '{}' non trovati


144

Ciao ho un problema esasperante.

Ho un modello di URL come questo:

# mproject/myapp.urls.py

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

funziona bene nel browser ma per i test, quando lo faccio 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 il temuto:

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

Cosa mi sto perdendo qui?


in lastest Django , inversa viene importato da URL. vale a direfrom django.urls import reverse
suhailvs il

Risposte:



6

La soluzione @ miki725 è assolutamente corretta. In alternativa, se desideri utilizzare l' argsattributo al contrario kwargs, puoi semplicemente modificare il codice come segue:

project_id = 4
reverse('edit_project', args=(project_id,))

Un esempio di questo può essere trovato nella documentazione . Questo essenzialmente fa la stessa cosa, ma gli attributi vengono passati come argomenti. Ricorda che qualsiasi argomento passato deve essere assegnato a un valore prima di essere invertito. Basta usare lo spazio dei nomi corretto, che in questo caso è 'edit_project'.


1
Mi piace la sua brevità.
Bartleby,

2

Questo problema mi ha dato un grande mal di testa quando ho provato a usare il reverse per generare il link di attivazione e inviarlo via e-mail ovviamente. Quindi penso da tests.py sarà lo stesso. Il modo corretto per farlo è il 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)) 

1
Ho appena provato questo, non funziona. La risposta di @ miki725 è corretta.
Daniel van Flymen,

1
Credo che un tutore sia nel posto sbagliato: response = client.get (reverse ('edit_project', project_id = 4))
Wim Feijen,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.