Django 2.0 路径错误?:(2_0.W001) 有一条包含 '(?P<', begins with a '^', or ends with a '$'

问题描述 投票:0回答:7

我正在尝试为我的网站上的音乐应用程序创建后端代码。

我在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 django-views django-urls
7个回答
160
投票

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

23
投票

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

]

9
投票

除了使用“re_path”之外,您还可以使用“”(空字符串)作为 path() 的第一个参数。我已经使用过它并且对我有用。

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

5
投票

url()
在较新版本的 django 中已弃用。因此,在您的 url 文件中不要使用
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'),
]

3
投票

如果不起作用,请将此代码添加到 urlpatterns 内的 yoursite\urls.py 中:

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

2
投票

使用空字符串 '' 代替 '/' 或 r'^$'。它就像一个魅力。代码如下:

from django.urls import path, re_path

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

0
投票

在django 2.0版本中主键这样写...

url.py

from django.urls import path

from . import views


urlpatterns = [
    path('', views.course_list),
    path('<int:pk>/', views.course_detail),
]
© www.soinside.com 2019 - 2024. All rights reserved.