1. ホーム
  2. django

Django 2.0 パスエラー ?: (2_0.W001) に '(?P<')' を含むルート、'^' で始まるルート、'$' で終わるルートが存在します。

2023-11-20 20:52:18

質問内容

自分のウェブサイトで音楽アプリケーションのバックエンドコードを作成しようとしています。

以下のように、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 のような数字が続く場合 (これは私ができるようにしたいことです)、ページが見つからず、ターミナルは上記の警告を出します。

どうすれば解決できますか?

新しい path() の構文は、正規表現を使いません。次のようなものが欲しいでしょう。

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