255 votes

qu'est-ce que reverse () dans Django

Lorsque je lis parfois du code Django, je vois dans certains modèles reverse() . Je ne sais pas trop ce que c'est, mais il est utilisé avec HttpResponseRedirect. Comment et quand ce reverse() censé être utilisé?

Ce serait bien si quelqu'un donnait une réponse avec quelques exemples ...

404voto

scytale Points 1838

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.

4voto

Pierre Points 961

Il y a un doc pour ça

https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse

il peut être utilisé pour générer une URL pour une vue donnée

Le principal avantage est que vous ne codez pas en dur les routes dans votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X