urls template example python django python-3.x django-views django-urls

python - template - httpresponse django example



Django 2.0 path error?:(2_0.W001) tiene una ruta que contiene ''(? P<'', comienza con ''^'' o termina con ''$'' (3)

Soy nuevo en Django y estoy intentando crear el código de back-end para una aplicación de música en mi sitio web.

He creado la vista correcta en mi archivo views.py (en el directorio correcto) como se muestra a continuación:

def detail(request, album_id): return HttpResponse("<h1>Details for Album ID:" + str(album_id) + "</h1>")

sin embargo, al crear la url o la ruta para esto

#/music/71/ (pk) path(r''^(?P<album_id>[0-9])/$'', views.detail, name=''detail''),

Estoy experimentando una advertencia en mi terminal que dice:

?: (2_0.W001) Your URL pattern ''^(?P<album_id>[0-9])/$'' [name=''detail''] has a route that contains ''(?P<'', begins with a ''^'', or ends with a ''$''. This was likely an oversight when migrating to django.urls.path().

y siempre que la /music/ (para la que funciona la ruta) esté seguida de un número, como /music/1 (que es lo que quiero poder hacer), no se puede encontrar la página y el terminal muestra la advertencia anterior.

Puede ser un simple error y solo ser estúpido, pero soy nuevo en las declaraciones de expresiones regulares de Django y Python, por lo que se agradece cualquier ayuda.


En lugar de usar ''re_path'', también puede usar '''' (cadena vacía) como el primer argumento de su ruta (). Lo he usado y funcionó para mí.

urlpatterns = [ path(''admin/'', admin.site.urls), path('''',views.index,name=''index''), ]


La nueva sintaxis de path() en Django 2.0 no usa expresiones regulares. Quieres algo como:

path(''<int:album_id>/'', views.detail, name=''detail''),

Si desea usar una expresión regular, puede usar re_path() .

re_path(r''^(?P<album_id>[0-9])/$'', views.detail, name=''detail''),

La antigua url() todavía funciona y ahora es un alias para re_path , pero es probable que quede obsoleta en el futuro.

url(r''^(?P<album_id>[0-9])/$'', views.detail, name=''detail''),


Solo para agregar a lo que @alasdair mencionó, agregué re_path como parte de la inclusión y funciona bien. Aquí hay un ejemplo

Agregue re_path a su importación (para django 2.0)

from django.urls import path, re_path urlpatterns = [ path(''admin/'', admin.site.urls), re_path(r''^$'', home, name=''home''), ]