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''),
]