Le modèle d'URL de Django qui a un paramètre numérique est:
url(r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail')
Quelle sera la syntaxe correcte si mon poll_id n'est pas un nombre mais une chaîne de caractères?
Cela dépend des personnages qui vous intéressent. Comme les docs disons, \w
vous donnera un caractère alphanumérique ou un trait de soulignement.
pour avoir un paramètre de chaîne dans l'url, vous pouvez avoir: url comme ceci:
url(r'^polls/(?P<string>[\w\-]+)/$','polls.views.detail')
Cela permettra même aux chaînes de slug de passer par exemple: des chaînes comme node-js etc.
À partir de Django 2.0, il est plus facile de gérer les paramètres de chaîne dans les URL avec l'ajout du symbole slug , qui est utilisé comme int dans rls.py:
from Django.urls import path
urlpatterns = [
path('something/<slug:foo>', views.slug_test),
]
Et dans votre vue basée sur une fonction ou une classe, vous la géreriez comme n'importe quel autre paramètre:
def slug_test(request, foo):
return HttpResponse('Slug parameter is: ' + foo)
Dans les versions plus récentes de Django comme 2.1, vous pouvez utiliser
path('polls/<str:poll_id>', views.polls_detail)
comme indiqué ici répartiteur d'URL Django
def polls_detail(request,poll_id):
#process your request here
À partir de Django 2.0 en avant, path
a été introduit. path
ne prend pas reg ex dans les URL, donc il est censé être une version simplifiée de l'ancienne url
À partir de 2.0, vous pouvez utiliser le chemin d'accès comme ci-dessous:
path('polls/<poll_id>', views.polls_detail)
les paramètres de chemin de chaîne n'ont pas besoin d'être explicitement spécifiés, car le type de données par défaut pour les paramètres de chemin est la chaîne elle-même.
Réf: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-
Si vous utilisez Django version> = 2.0, alors cela se fait simplement comme ci-dessous.
from Django.urls import path
urlpatterns = [
...
path('polls/<string>/$','polls.views.detail')
...
]
Source: https://docs.djangoproject.com/en/2.0/ref/urls/#Django.urls.path