web-dev-qa-db-fra.com

Django modèle d'url - paramètre de chaîne

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?

41
rechie

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.

35

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.

38
Hiro

À 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)
14
Andreas Bergström

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
5
abhijeetgurle

À 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-

1
Binita Bharati

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

1
SuperNova