it-swarm.com.ru

Ошибка пути Django 2.0?: (2_0.W001) есть маршрут, который содержит '(? P <', начинается с '^' или заканчивается '$'

Я новичок в Django и пытаюсь создать внутренний код для музыкального приложения на моем сайте.

Я создал правильный вид в моем файле views.py (в правильном каталоге), как показано ниже:

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

однако при создании URL или пути для этого (показано ниже)

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

На моем терминале появляется предупреждение о том, что:

?: (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().

и всякий раз, когда за /music/ (для которого работает путь) следует число, такое как /music/1 (что я хочу сделать), страница не может быть найдена, и терминал выдает вышеуказанное предупреждение.

Это может быть простая ошибка, и я просто глуп, но я новичок в выражениях Django и регулярных выражений Python, поэтому любая помощь приветствуется.

29
Joe Tynan

Новый синтаксис path() в Django 2.0 не использует регулярные выражения. Вы хотите что-то вроде:

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

Если вы хотите использовать регулярное выражение, вы можете использовать re_path() .

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

Старая url() все еще работает и теперь является псевдонимом re_path, но в будущем она, скорее всего, не рекомендуется.

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

Просто чтобы добавить к тому, что упомянул @alasdair, я добавил re_path как часть include, и он отлично работает. Вот пример

Добавьте re_path к вашему импорту (для Django 2.0)

from Django.urls import path, re_path

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

]
8
Stryker

Вместо использования 're_path' вы также можете использовать '' (пустую строку) в качестве первого аргумента вашего пути (). Я использовал это, и это сработало для меня.

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

Используйте пустую строку '' вместо '/' или r '^ $'. Отлично работает. Код как ниже:

from Django.urls import path, re_path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home, name='home'),
]
1
DILIP

Если это не работает, добавьте этот код в yoursite\urls.py внутри urlpatterns:

path('music/<int:album_id>/', views.detail, name="detail"),
0
Hamza Naji