web-dev-qa-db-ja.com

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

私はDjangoが初めてで、私のWebサイトで音楽アプリケーションのバックエンドコードを作成しようとしています。

以下に示すように、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 regexステートメントは初めてなので、どんな助けでも大歓迎です。

38
Joe Tynan

Django 2.0の新しい 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'),
71
Alasdair

@alasdairの言及に追加するために、インクルードの一部としてre_pathを追加しましたが、正常に動作します。ここに例があります

Re_pathをインポートに追加します(Django 2.0の場合)

from Django.urls import path, re_path

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

]
12
Stryker

're_path'を使用する代わりに、 ''(空の文字列)をpath()の最初の引数として使用することもできます。私はそれを使用し、それは私のために働いた。

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

動作しない場合は、urlpatterns内のyoursite\urls.pyにこのコードを追加します。

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

'/'またはr '^ $'の代わりに空の文字列 ''を使用します。それは魅力のように機能します。コードは次のとおりです。

from Django.urls import path, re_path

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