Django 2.0路径错误?:(2_0.W001)具有包含"(?P < $',以'^'开头,或以'$'结尾

d6kp6zgx  于 2023-10-21  发布在  Go
关注(0)|答案(7)|浏览(102)

我正在尝试创建我的网站上的音乐应用程序的后端代码。
我已经在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(这是我希望能够做的),页面无法找到,终端给出上述警告。

uttx8gqw

uttx8gqw1#

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

s71maibg2#

只是为了补充@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'),

]
o4tp2gmn

o4tp2gmn3#

除了使用're_path',你也可以使用''(空字符串)作为path()的第一个参数。我用过它,它为我工作。

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

olhwl3o24#

url()在较新版本的django中被弃用。因此,在url文件中使用re_path()代替url(),如下所示:

from django.urls import path, re_path
from . import views

urlpatterns = [
    #url(r'^(?P<album_id>[0-9]+)/$', views.detail, name='detail'),
    path('', views.index, name='index'),
    re_path(r'^(?P<album_id>[0-9])/$', views.detail, name='detail'),
]
fbcarpbf

fbcarpbf5#

如果不起作用,请将以下代码添加到您的站点\urls.py的urlpatterns中:

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

0ejtzxu16#

使用空字符串“”而不是“/”或“^$”。它就像一个魅力。代码如下:

from django.urls import path, re_path

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

bzzcjhmw7#

在Django 2.0版本中,主键是这样写的。

urls.py(示例网站)

from django.urls import path

from . import views

urlpatterns = [
    path('', views.course_list),
    path('<int:pk>/', views.course_detail),
]

相关问题