Dans un cours en ligne sur Django, l'instructeur nous demande d'utiliser la fonction url()
pour appeler des vues et utiliser des expressions régulières dans la liste urlpatterns. J'ai vu d'autres exemples sur youtube de cela… .. p. Ex.
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"),
]
Cependant, en parcourant le didacticiel Django, ils utilisent plutôt path()
, par exemple:
from Django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index"),
]
De plus, les expressions régulières ne semblent pas fonctionner avec la fonction path()
, car l'utilisation d'une path(r'^$', views.index, name="index")
ne permet pas de trouver la vue mysite.com/polls/
.
Est-ce que l’utilisation de path()
sans expression rationnelle correspond correctement? Est-ce que url()
est plus puissant mais plus compliqué alors ils utilisent path()
pour commencer? Ou s'agit-il d'outils différents pour des emplois différents?
Dans la documentation Django pour url
url(regex, view, kwargs=None, name=None)
Cette fonction est un alias deDjango.urls.re_path()
. Il est probable qu’il soit déconseillé dans une version future.
La différence principale entre path
et re_path
est que path
utilise route sans regex
Vous pouvez utiliser re_path
pour les appels de regex complexes et utiliser uniquement path
pour des recherches plus simples.
La nouvelle fonction Django.urls.path()
permet une syntaxe de routage d'URL plus simple et plus lisible. Par exemple, cet exemple tiré des précédentes versions de Django:
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)
pourrait être écrit comme:
path('articles/<int:year>/', views.year_archive)
La fonction Django.conf.urls.url()
des versions précédentes est maintenant disponible sous la forme Django.urls.re_path()
. L'ancien emplacement reste pour la compatibilité ascendante, sans dépréciation imminente. L'ancienne fonction Django.conf.urls.include()
est maintenant importable à partir de Django.urls
afin que vous puissiez utiliser:
from Django.urls import include, path, re_path
dans le URLconfs. Pour en savoir plus Django doc
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 censé ê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.
Le chemin 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 façon plus Pythonic, et permet de ne pas utiliser une expression régulière dans les arguments que vous passez pour voir ... vous pouvez utiliser la fonction int () par exemple.
Les expressions régulières ne semblent pas fonctionner avec la fonction path()
avec les arguments suivants: path(r'^$', views.index, name="index")
.
Ce devrait être comme ceci: path('', views.index, name="index")
.
Le 1er argument doit être vide pour entrer une expression régulière.
À partir de la version 2.0, de nombreux utilisateurs utilisent path, mais nous pouvons utiliser soit path, soit url . Par exemple, dans Django 2.1.1 Le mappage de fonctions via url peut être effectué comme suit
from Django.contrib import admin
from Django.urls import path
from Django.contrib.auth import login
from posts.views import post_home
from Django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^posts/$', post_home, name='post_home'),
]
où posts est une application et post_home est une fonction de views.py