En un curso en línea de Django, el instructor nos pide que usemos 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() 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 función path() ya que usar una path(r'^$', views.index, name="index") no encontrará la vista mysite.com/polls/ .
¿Usar path() sin que la expresión regular coincida de la manera correcta en el futuro? ¿Es url() más poderoso pero más complicado, por lo que están usando path() para comenzar? ¿O se trata 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 paradjango.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 expresiones regulares
Puede usar re_path para llamadas de expresiones regulares 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 permanece para la compatibilidad con versiones anteriores, sin una desaprobación inminente. La antigua función django.conf.urls.include() ahora se puede importar desde django.urls para que pueda usar:
from django.urls import include, path, re_pathen las URLconfs . Para leer más django doc
path es simplemente nuevo en Django 2.0, que se lanzó hace solo 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.