Django 2.0 路径错误?:(2_0.W001) 有一个包含'(?P<'的路由,以'^'开头,或以'$'结尾
Django 2.0 path error ?: (2_0.W001) has a route that contains '(?P<', begins with a '^', or ends with a '$'
我正在尝试为我网站上的音乐应用程序创建后端代码。
我已经在我的 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 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'),
]
使用空字符串 '' 代替 '/' 或 r'^$'。它就像一个魅力。代码如下:
from django.urls import path, re_path
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name='home'),
]
如果它不起作用,请将此代码添加到 yoursite\urls.py inside urlpatterns:
path('music/<int:album_id>/', views.detail, name="detail"),
在django 2.0版本主键这样写...
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.course_list),
path('<int:pk>/', views.course_detail),
]
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'),
]
我正在尝试为我网站上的音乐应用程序创建后端代码。
我已经在我的 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 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'),
]
使用空字符串 '' 代替 '/' 或 r'^$'。它就像一个魅力。代码如下:
from django.urls import path, re_path
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name='home'),
]
如果它不起作用,请将此代码添加到 yoursite\urls.py inside urlpatterns:
path('music/<int:album_id>/', views.detail, name="detail"),
在django 2.0版本主键这样写...
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.course_list),
path('<int:pk>/', views.course_detail),
]
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'),
]