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?

41
demandé sur FrostedCookies 2017-12-23 00:37:37

6 réponses

à Partir de la documentation de Django 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.

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

56
répondu iklinac 2017-12-22 22:35:30

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

21
répondu silva blaze 2018-10-03 08:47:40

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.

13
répondu Daniel Roseman 2017-12-22 21:55:05

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.

4
répondu Denis Cottin 2018-02-25 20:04:24

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.

2
répondu Danish Shaikh 2018-01-20 20:22:24

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

0
répondu Nani Chintha 2018-09-21 07:10:25