python - urls - {% url %} django




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

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