私は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ステートメントは初めてなので、どんな助けでも大歓迎です。
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'),
@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'),
]
're_path'を使用する代わりに、 ''(空の文字列)をpath()の最初の引数として使用することもできます。私はそれを使用し、それは私のために働いた。
urlpatterns = [
path('admin/', admin.site.urls),
path('',views.index,name='index'),
]
動作しない場合は、urlpatterns内のyoursite\urls.pyにこのコードを追加します。
path('music/<int:album_id>/', views.detail, name="detail"),
'/'またはr '^ $'の代わりに空の文字列 ''を使用します。それは魅力のように機能します。コードは次のとおりです。
from Django.urls import path, re_path
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name='home'),
]