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

时间:2017-12-05 19:47:39

标签: python django python-3.x django-views django-urls

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

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

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

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

#/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正则表达式语句的新手,所以任何帮助都表示赞赏。

7 个答案:

答案 0 :(得分:64)

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

答案 1 :(得分:11)

Just to add to what @alasdair mentioned, I added re_path as part of the include and it works fine. Here is an example

Add re_path to your import (for django 2.0)

from django.urls import path, re_path

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

]

答案 2 :(得分:6)

而不是使用&#39; re_path&#39;您也可以使用&#39;&#39;(空字符串)作为路径()的第一个参数。我用过它,它对我有用。

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

答案 3 :(得分:1)

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

from django.urls import path, re_path

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

在django 2.0版主键中以这种方式编写...

urls.py

from django.urls import path

from . import views


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

答案 6 :(得分:0)

较新版本的django不推荐使用

url()。因此,代替使用url,请在您的url文件中使用re_path(),如下所示:

value7