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 dedjango.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 una nueva característica de Django 2.0. Explicado aquí: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0
Parezca una forma más pitónica, y habilite no usar expresiones regulares en el argumento que pasa para ver ... puede usar la función int () por ejemplo.
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.