Dans un cours en ligne django, l'instructeur nous demande d'utiliser la url()
fonction pour appeler des vues et utiliser des expressions régulières dans la liste des urlpatterns. J'ai vu d'autres exemples sur YouTube de cela. 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 parcourant le tutoriel Django, ils utilisent à la path()
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 la path()
fonction car l'utilisation de a path(r'^$', views.index, name="index")
ne trouvera pas la mysite.com/polls/
vue.
Est-ce que l'utilisation path()
sans regex correspond à la bonne façon d'aller de l'avant? Est-ce url()
plus puissant mais plus compliqué alors ils utilisent path()
pour commencer? Ou s'agit-il de différents outils pour différents emplois?
python
django
django-urls
GivréCookies
la source
la source
path()
eturl()
. Si vous voulez ou avez besoin d'utiliser des expressions régulières, vous devez utiliserre_path()
ouurl()
. Au-delà de cela, je pense que c'est vraiment à vous de choisir celui que vous choisissez.Réponses:
De la documentation Django pour l' url
La principale différence entre
path
etre_path
est quepath
utilise route sans regexVous pouvez utiliser
re_path
pour des appels regex complexes et l'utiliser uniquementpath
pour des recherches plus simplesla source
re_path
est ce que je recherche alors.La nouvelle
django.urls.path()
fonction permet une syntaxe de routage URL plus simple et plus lisible. Par exemple, cet exemple des versions précédentes de Django:pourrait s'écrire:
La
django.conf.urls.url()
fonction des versions précédentes est désormais disponible en tant quedjango.urls.re_path()
. L'ancien emplacement reste pour la compatibilité ascendante, sans dépréciation imminente. L'anciennedjango.conf.urls.include()
fonction est désormais importable à partir dedjango.urls
, vous pouvez donc utiliser:dans les URLconfs . Pour en savoir plus sur django doc
la source
path()
exemple autorise les nombres non à quatre chiffres./<int:year>/
signifie que l'année doit être en nombre entier, je vous suggère de parcourir la documentation officielle.int
n'est pas équivalent à[0-9]{4}
. Qu'il soit utilisé ou non pour les nombres entiers n'a aucune incidence sur cette relation. Peut-être que si vous remplacez[0-9]{4}
par[0-9]+
votre comparaison, cela pourrait être moins imprécis, même si vous devrez peut-être toujours gérer le type de résultat final (str vs int?).path
est tout simplement nouveau dans Django 2.0, qui n'est sorti que depuis quelques semaines. La plupart des didacticiels n'auront pas été mis à jour pour la nouvelle syntaxe.C'était certainement censé être une façon plus simple de faire les choses; Cependant, je ne dirais pas que l'URL est plus puissante, vous devriez pouvoir exprimer des modèles dans les deux formats.
la source
Les expressions régulières ne semblent pas travailler avec la
path()
fonction avec les arguments suivants:path(r'^$', views.index, name="index")
.Il devrait être comme ceci:
path('', views.index, name="index")
.Le premier argument doit être vide pour entrer une expression régulière.
la source
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
Ressemblez à une manière plus pythonique, et permet de ne pas utiliser d'expression régulière dans l'argument que vous passez à la vue ... vous pouvez utiliser la fonction int () par exemple.
la source
Depuis la v2.0, de nombreux utilisateurs utilisent le chemin, mais nous pouvons utiliser le chemin ou l'url. Par exemple, dans django 2.1.1, le mappage vers les fonctions via l'URL peut être effectué comme suit
où posts est une application et post_home est une fonction dans views.py
la source