Django Reverse avec les arguments '()' et les arguments de mot-clé '{}' non trouvés


144

Salut, j'ai un problème exaspérant.

J'ai un modèle d'URL comme celui-ci:

# mproject/myapp.urls.py

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

cela fonctionne bien dans le navigateur mais pour les tests, quand je fais cela dans le shell:

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

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

Je reçois le redouté:

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

Qu'est-ce que j'oublie ici?


dans le dernier django , l'inverse est importé depuis les URL. iefrom django.urls import reverse
suhailvs

Réponses:



6

La solution @ miki725 est absolument correcte. Alternativement, si vous souhaitez utiliser l' argsattribut par opposition à kwargs, vous pouvez simplement modifier votre code comme suit:

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

Un exemple de ceci peut être trouvé dans la documentation . Cela fait essentiellement la même chose, mais les attributs sont passés en arguments. N'oubliez pas que tous les arguments transmis doivent recevoir une valeur avant d'être inversés. Utilisez simplement l'espace de noms correct, ce qui est dans ce cas 'edit_project'.


1
J'aime sa brièveté.
Bartleby

2

Ces problèmes m'ont donné beaucoup de mal à la tête lorsque j'ai essayé d'utiliser la fonction inverse pour générer un lien d'activation et l'envoyer par e-mail bien sûr. Donc, je pense que de tests.py ce sera la même chose. La bonne façon de procéder est la suivante:

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
J'ai juste essayé ça, ça ne marche pas. La réponse de @ miki725 est correcte.
Daniel van Flymen

1
Je pense qu'une accolade est au mauvais endroit: response = client.get (reverse ('edit_project', project_id = 4))
Wim Feijen

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.