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

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 pasar por 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 utilizar una path(r'^$', views.index, name="index") no encuentra la vista mysite.com/polls/ .

¿Está utilizando path() sin que las expresiones regulares coincidan con la forma correcta de avanzar? ¿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 la ruta sin expresiones regulares

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

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

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

podría ser escrito como:

 path('articles//', 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 desminación inminente. La antigua función django.conf.urls.include() ahora es importable desde django.urls para que pueda usar:

 from django.urls import include, path, re_path 

en la URLconfs . Para leer más django doc

path es simplemente nueva en Django 2.0, que se lanzó hace un par de semanas. La mayoría de los tutoriales no se han actualizado para la nueva syntax.

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

Ruta 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 pythonica, y habilite para no usar expresiones regulares en el argumento que pase para ver … puede utilizar la función int () por ejemplo.

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.

Desde la v2.0, muchos usuarios están usando 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

 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