web-dev-qa-db-fra.com

Django, paramètre de nom dans urlpatterns

Je suis en train de suivre un tutoriel où mes urlpatterns sont:

urlpatterns = patterns('',
    url(r'^passwords/$', PasswordListView.as_view(), name='passwords_api_root'),
    url(r'^passwords/(?P<id>[0-9]+)$', PasswordInstanceView.as_view(), name='passwords_api_instance'),
    ...other urls here...,
)

PasswordListView et PasswordInstanceView sont censés être des vues basées sur des classes. Je n'ai pas pu comprendre la signification du paramètre nom. S'agit-il d'un paramètre par défaut transmis à la vue?

43
Leonardo

Non. C'est juste que Django vous donne la possibilité de nommer vos vues au cas où vous auriez besoin de vous y référer à partir de votre code ou de vos modèles. C'est une pratique utile et bonne car vous évitez le codage en dur URL sur votre code ou à l'intérieur de vos modèles. Même si vous modifiez l'URL réelle, vous n'avez rien d'autre à changer, car vous y ferez référence par son nom.

e.x avec vues:

from Django.http import HttpResponseRedirect
from Django.core.urlresolvers import reverse #this is deprecated in Django 2.0+
from Django.urls import reverse #use this for Django 2.0+

def myview(request):
    passwords_url = reverse('passwords_api_root')  # this returns the string `/passwords/`
    return HttpResponseRedirect(passwords_url)

Plus ici .

ex. dans les modèles

<p>Please go <a href="{% url 'passwords_api_root' %}">here</a></p>

Plus ici .

55
rantanplan