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

Joe*_*nan 42 python django django-urls django-views python-3.x

我是Django的新手,正在尝试在我的网站上为音乐应用程序创建后端代码.

我在views.py文件中创建了正确的视图(在正确的目录中),如下所示:

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

但是,为此创建URL或路径时(如下所示)

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

我在终端上遇到警告:

?: (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().
Run Code Online (Sandbox Code Playgroud)

每当/music/(路径工作的)后面跟一个数字,例如/music/1(这是我想做的),就找不到页面,终端给出了上述警告.

这可能是一个简单的错误,只是我是愚蠢但我是Django和python正则表达式语句的新手,所以任何帮助表示赞赏.

Ala*_*air 85

path()Django 2.0中的新语法不使用正则表达式.你想要的东西:

path('<int:album_id>/', views.detail, name='detail'),
Run Code Online (Sandbox Code Playgroud)

如果要使用正则表达式,可以使用re_path().

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

旧的url()仍然可以工作,现在是别名re_path,但将来很可能会被弃用.

url(r'^(?P<album_id>[0-9])/$', views.detail, name='detail'),
Run Code Online (Sandbox Code Playgroud)


Str*_*ker 13

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

]
Run Code Online (Sandbox Code Playgroud)


小智 7

您也可以使用''(空字符串)作为路径()的第一个参数,而不是使用're_path'.我用它,它对我有用.

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',views.index,name='index'),
]
Run Code Online (Sandbox Code Playgroud)


Pur*_*ula 5

url()在较新版本的 django 中已弃用。因此,不要在 urls 文件中url()使用,如下所示:re_path()

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'),
]
Run Code Online (Sandbox Code Playgroud)