urls template python django django-urls

python - template - ¿Es mejor usar path() o url() en urls.py para django 2.0?



django views (6)

A partir de la versión 2.0, muchos usuarios usan la ruta, pero podemos usar la ruta o la URL. Por ejemplo, en django 2.1.1, la asignación de funciones a través de url se puede hacer de la siguiente manera

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''), ]

donde posts es una aplicación y post_home es una función en views.py

En un curso en línea de django, el instructor nos hace usar la función url() para llamar vistas y utilizar expresiones regulares en la lista de patrones de url. He visto otros ejemplos en YouTube de esto. p.ej

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"), ]

Sin embargo, al seguir el tutorial de Django, usan path() lugar, por ejemplo:

from django.urls import path from . import views urlpatterns = [ path('''', views.index, name="index"), ]

Además, las expresiones regulares no parecen funcionar con la función path() ya que el uso de una path(r''^$'', views.index, name="index") no encontrará mysite.com/polls/ view.

¿Está utilizando path() sin regex que coincida con la forma correcta en el futuro? ¿Es url() más potente pero más complicado, por lo que están usando path() para comenzar? ¿O es un caso de diferentes herramientas para diferentes trabajos?


De la documentación de Django para url

url(regex, view, kwargs=None, name=None) Esta función es un alias de django.urls.re_path() . Es probable que quede obsoleto en una versión futura.

La diferencia clave entre path y re_path es que la path usa ruta sin expresión regular

Puede usar re_path para llamadas regex complejas y usar solo path para búsquedas más simples


La nueva función django.urls.path() permite una sintaxis de enrutamiento de URL más simple y legible. Por ejemplo, este ejemplo de versiones anteriores de Django:

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

podría escribirse como:

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

La función django.conf.urls.url() de versiones anteriores ahora está disponible como django.urls.re_path() . La ubicación anterior sigue siendo compatible con versiones anteriores, sin una degradación inminente. La antigua función django.conf.urls.include() ahora se puede django.urls desde django.urls para que pueda usar:

from django.urls import include, path, re_path

en las URLconfs . Para más información django doc


Las expresiones regulares no parecen funcionar con la función path() con los siguientes argumentos: path(r''^$'', views.index, name="index") .

Debería ser así: path('''', views.index, name="index") .

El primer argumento debe estar en blanco para ingresar una expresión regular.



path es simplemente nuevo en Django 2.0, que solo se lanzó hace un par de semanas. La mayoría de los tutoriales no se habrán actualizado para la nueva sintaxis.

Ciertamente se suponía que era una forma más simple de hacer las cosas; Sin embargo, no diría que la URL es más poderosa, debería poder expresar patrones en cualquier formato.