En un curso en línea de django, el instructor nos hace usar la url()
función 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()
en su 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 path()
función, ya que el uso de a path(r'^$', views.index, name="index")
no encuentra la mysite.com/polls/
vista.
¿ path()
Usar sin expresiones regulares coincide con la forma correcta en el futuro? ¿Es url()
más poderoso pero más complicado por lo que están usando path()
para comenzar? ¿O es un caso de diferentes herramientas para diferentes trabajos?
python
django
django-urls
Galletas Heladas
fuente
fuente
path()
yurl()
. Si quiere o necesita usar expresiones regulares, debe usarre_path()
ourl()
. Más allá de eso, creo que depende de ti cuál elijas.Respuestas:
De la documentación de Django para url
La diferencia clave entre
path
yre_path
es quepath
usa la ruta sin expresiones regularesPuede usar
re_path
para llamadas de expresiones regulares complejas y usar solopath
para búsquedas más simplesfuente
re_path
es lo que estoy buscando entonces.La nueva
django.urls.path()
función permite una sintaxis de enrutamiento de URL más simple y legible. Por ejemplo, este ejemplo de versiones anteriores de Django:podría escribirse como:
La
django.conf.urls.url()
función de versiones anteriores ahora está disponible comodjango.urls.re_path()
. La ubicación anterior sigue siendo compatible con versiones anteriores, sin una degradación inminente. La antiguadjango.conf.urls.include()
función ahora es importabledjango.urls
para que pueda usar:en las URLconfs . Para más información django doc
fuente
path()
ejemplo permite números que no son de cuatro dígitos./<int:year>/
significa que el año debe ser en número entero, le sugiero que busque a través de la documentación oficial.int
no es equivalente a[0-9]{4}
. Si se usa para enteros o no, no tiene relación con esta relación. Quizás si lo reemplazara[0-9]{4}
con[0-9]+
su comparación podría ser menos impreciso, aunque es posible que aún deba tratar con el tipo del resultado final (str vs int?).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.
fuente
Las expresiones regulares no parecen trabajo con la
path()
función con los siguientes argumentos:path(r'^$', views.index, name="index")
.Debe ser como la siguiente:
path('', views.index, name="index")
.El primer argumento debe estar en blanco para ingresar una expresión regular.
fuente
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.
fuente
Desde la v2.0, muchos usuarios usan la ruta, pero podemos usar la ruta o la URL. Por ejemplo, en django 2.1.1, la asignación a funciones a través de url se puede hacer de la siguiente manera
donde posts es una aplicación y post_home es una función en views.py
fuente