Est-il préférable d'utiliser path() ou url() dans urls.py pour django 2.0?
dans un cours en ligne de django, l'instructeur nous fait utiliser le url()
fonction pour appeler des vues et utiliser des expressions régulières dans la liste urlpatterns. J'ai vu d'autres exemples sur youtube.
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"),
]
Cependant, en passant par le tutoriel Django, ils utilisent path()
à la place 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 le path()
fonction comme utilisant un path(r'^$', views.index, name="index")
ne trouverez pas de l' mysite.com/polls/
afficher.
Est en utilisant path()
sans que regex ne suive la bonne voie? url()
plus puissant mais plus compliqué donc ils utilisent path()
pour commencer nous? Ou s'agit-il d'outils différents pour des tâches différentes?
6 réponses
à Partir de la documentation de Django url
url(regex, view, kwargs=None, name=None)
Cette fonction est un aliasdjango.urls.re_path()
. Il est susceptible d'être obsolète dans une version future.
différence entre path
et re_path
que path
utilise route sans regex
Vous pouvez utiliser re_path
pour les appels regex complexes et utilisez juste path
pour des recherches plus simples
La django.urls.path()
la fonction permet une syntaxe de routage D'URL plus simple et plus lisible. Par exemple, cet exemple de la précédente Django communiqués de:
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)
pourrait s'écrire comme:
path('articles/<int:year>/', views.year_archive)
django.conf.urls.url()
la fonction des versions précédentes est maintenant disponible en tant que django.urls.re_path()
. L'ancien emplacement reste pour rétrocompatibilité, sans une dépréciation imminente. L'ancien django.conf.urls.include()
fonction est maintenant importable à partir de 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
path
est tout simplement nouveau dans Django 2.0, qui est sorti il y a seulement quelques semaines. La plupart des tutoriels n'auront pas été mis à jour pour la nouvelle syntaxe.
il était certainement censé être une façon plus simple de faire les choses; je ne dirais pas que L'URL est plus puissant si, vous devriez être en mesure d'exprimer des modèles dans l'un ou l'autre format.
Path est une nouvelle fonctionnalité de Django 2.0. Expliqué ici : https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0
ressemble plus à pythonic way, et permet de ne pas utiliser l'expression régulière dans l'argument que vous passez à view... vous pouvez utiliser la fonction int() par exemple.
les expressions régulières ne semblent pas fonctionner avec le path()
la fonction avec les arguments suivants: path(r'^$', views.index, name="index")
.
Il doit être comme ceci: path('', views.index, name="index")
.
Le 1er argument doit être vide pour entrer une expression régulière.
De v2.0 beaucoup d'utilisateurs utilisent le chemin, mais nous pouvons utiliser le chemin ou l'url. Par exemple à django 2.1.1 la cartographie des fonctions par le biais de l'url peut être fait 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ù des postes est une application & post_home est une fonction dans views.py