Shell appels à l' inverse (comme mentionné ci-dessus) sont très bons pour déboguer ces problèmes, mais il y a deux conditions critiques:
- vous devez fournir des arguments qui correspond à ce que les arguments le point de vue des besoins,
- ces arguments doivent correspondre regexp modèles.
Oui, c'est logique. Oui, il est aussi source de confusion en raison inverse ne jeter l'exception et ne pas vous donner de conseils.
Un exemple de modèle d'URL:
url(r'^cookies/(?P<hostname>[^/]+)/(?P<url_id>\d+)/$', 'register_site.views.show_cookies', name='show_cookies'),
Et puis ce qui se passe dans le shell:
>>> from register_site.views import show_cookies
>>> reverse(show_cookies)
NoReverseMatch: Reverse for 'register_site.views.show_cookies' with arguments '()' and keyword arguments '{}' not found.
Il ne fonctionne pas parce que j'ai fourni aucun argument.
>>> reverse('show_cookies', kwargs={'url_id':123,'hostname': 'aaa'})
'/cookies/aaa/123'
Maintenant, il a travaillé, mais...
>>> reverse('show_cookies', kwargs={'url_id':'x','hostname': 'www.dupa.com'})
NoReverseMatch: Reverse for 'show_cookies' with arguments '()' and keyword arguments '{'url_id': 'x', 'hostname': 'www.dupa.com'}' not found.
Maintenant, il ne fonctionne pas parce que *url_id* ne correspond pas à l'expression régulière (prévu numérique, chaîne fournie).
Vous pouvez utiliser l' inverse avec à la fois des arguments de position et les arguments mots-clefs. La syntaxe est la suivante:
reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None)
Comme il s'agit de l' url de la balise de modèle, il y a de drôle de chose à son sujet. Django documentation donne l'exemple de l'utilisation de cité le nom de la vue:
{% url de l'actualité.les vues.year_archive' yearvar %}
Je l'ai donc utilisé de la même manière dans mon gabarit HTML:
{% url "show_cookies' hostname=u.nom d'hôte url_id=u.pk %}
Mais cela n'a pas fonctionné pour moi. Mais le message de l'exception m'a donné une idée de ce que pourrait être fausse - note, la double guillemets simples autour de le nom de la vue:
Inverse pour "show_cookies" avec des arguments...
Il a commencé à travailler quand j'ai enlevé les guillemets:
{% url show_cookies hostname=u.nom d'hôte url_id=u.pk %}
Et cela est source de confusion.