python - urls - {% url %} django




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

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?


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


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


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.








django-urls