https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse
dans votre urls.py
définir ce:
url(r'^foo$', some_view, name='url_name'),
dans un modèle, vous pouvez vous référer à cette url:
<!-- django <= 1.4 -->
<a href="{% url url_name %}">link which calls some_view</a>
<!-- django >= 1.5 or with {% load url from future %} in your template -->
<a href="{% url 'url_name' %}">link which calls some_view</a>
ce sera rendu par
<a href="http://stackoverflow.com/foo/">link which calls some_view</a>
maintenant dites que vous voulez faire quelque chose de similaire dans votre views.py
- par exemple, vous êtes la manipulation de certains autres url (pas /foo/
) dans certains autre point de vue (pas some_view
) et que vous souhaitez rediriger l'utilisateur vers /foo/
(souvent le cas sur le succès de la soumission du formulaire)
vous pourriez faire
return HttpResponseRedirect('/foo/')
mais si vous voulez changer l'url dans l'avenir vous devez mettre à jour votre urls.py
et toutes les références dans votre code. Cela viole SEC (google).
au lieu de cela, vous pouvez dire
return HttpResponseRedirect(reverse('url_name'))
Cela ressemble à travers toutes les url définies dans votre projet pour l'url définie avec le nom url_name
et retourne l'url réelle /foo/
.
cela signifie que vous vous référez à l'url que par ses name
de l'attribut si vous souhaitez modifier l'url elle-même ou de la vue, il se réfère à vous pouvez le faire en modifiant un seul endroit - urls.py
. Cette idée de l'édition d'un seul endroit est désignée comme "Don't Repeat Yourself" et c'est quelque chose à viser.