173 votes

Est-il préférable d'utiliser path () ou url () dans urls.py pour django 2.0?

Dans un django cours en ligne, le formateur a nous d'utiliser l' url() fonction à appeler vues et d'utiliser des expressions régulières dans la urlpatterns liste. J'ai vu d'autres exemples sur youtube de ce. par exemple

from django.contrib import admin
from django.urls import include
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^polls/', include('polls.urls')),
]


#and in polls/urls.py

urlpatterns = [        
    url(r'^$', views.index, name="index"),
]

Toutefois, en passant par les Django tutoriel, ils utilisent l' path() au lieu par exemple:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name="index"),        
]

En outre, les expressions régulières ne semble pas fonctionner avec l' path() fonction à l'aide d'un path(r'^$', views.index, name="index") ne trouverez pas de l' mysite.com/polls/ vue.

Est l'aide de path() sans regex correspondant à la bonne façon d'aller de l'avant? Est - url() plus puissant, mais plus compliquée, alors qu'ils utilisent, path() pour commencer à nous? Ou est-ce un cas de différents outils pour différents emplois?

209voto

iklinac Points 4196

De documentation de Django pour les url

url(regex, view, kwargs=None, name=None) Cette fonction est un alias django.urls.re_path(). Il est susceptible d'être obsolète dans une version future.

La clé de la différence entre path et re_path que path utilise la route sans regex

Vous pouvez utiliser re_path pour les complexes regex appels et de les utiliser seulement path pour simplifier les recherches

92voto

silva blaze Points 491

Le nouveau django.urls.path() fonction permet à un système plus simple, plus lisible le routage d'URL de la syntaxe. Par exemple, cet exemple de la précédente Django versions:

url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)

peut être écrite comme:

path('articles/<int:year>/', views.year_archive)

L' django.conf.urls.url() fonction des versions précédentes est maintenant disponible en django.urls.re_path(). L'ancien emplacement reste pour la compatibilité ascendante, sans imminente de la dépréciation. Le vieux - django.conf.urls.include() fonction est maintenant importable depuis django.urls de sorte que vous pouvez utiliser:

from django.urls import include, path, re_path

dans le URLconfs. Pour plus de lecture django doc

21voto

Daniel Roseman Points 199743

path est tout simplement nouveau dans Django 2.0, publié il y a seulement quelques semaines. La plupart des tutoriels n'auront pas été mis à jour pour la nouvelle syntaxe.

C'était supposé être une façon plus simple de faire les choses; Je ne dirais pas que l'URL est plus puissant, vous devriez pouvoir exprimer des motifs dans l'un ou l'autre format.

10voto

Danish Shaikh Points 61

Les expressions régulières ne semblent pas fonctionner avec la fonction path() avec les arguments suivants: path(r'^$', views.index, name="index") .

Cela devrait être comme ceci: path('', views.index, name="index") .

Le 1er argument doit être vide pour entrer une expression régulière.

9voto

Denis Cottin Points 128

Path est une nouvelle fonctionnalité de Django 2.0. Expliqué ici: https://docs.djangoproject.com/fr/2.0/releases/2.0/#whats-new-2-0

Ressemble à une manière plus pythonique, et permet de ne pas utiliser une expression régulière dans les arguments que vous passez à voir ... vous pouvez utiliser la fonction int () par exemple.

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