【问题标题】:URL Pattern with Primary Key not working properly带有主键的 URL 模式无法正常工作
【发布时间】:2021-02-04 09:43:58
【问题描述】:

在网址中的正则表达式方面需要帮助。我正在构建一个不同的应用程序,而不是上面讲座中显示的那个。将我的案例与讲座联系起来,学校是客户,学生是类别。

在 urls.py 文件中,来自 url_patterns :

url(r'^(?P<pk>[-\w]+)/$', views.DetailClientList.as_view(), name='Detail_Client_List'),

这可以正常工作,地址为http://127.0.0.1:8000/App1/cli1/,其中cli1 是Clients 表的主键(其中一条记录)。

但是当我将下面的行放在 url 模式中时(而不是上面的)

url(r'^<str:pk>/$', views.DetailClientList.as_view(), name='Detail_Client_List')

我收到以下错误(int:pk 的错误相同):


找不到页面 (404)

请求方法:GET

请求网址:http://127.0.0.1:8000/App1/cli1/


生成的 URL 在上述两种情况下都是相同的。那么我在哪里错了。我猜这是 url 模式正则表达式的问题(尽管生成的 URL 是相同的?)。

请帮忙。蒂亚!

【问题讨论】:

  • 使用 'path' 而不是 'urls', path('/', views.DetailClientList.as_view(), name='Detail_Client_List')

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


【解决方案1】:

尝试使用re_path 而不是“url”

from django.urls import re_path, path
1. re_path
re_path(r'^<str:pk>/$', views.DetailClientList.as_view(), name='Detail_Client_List')
2.路径
path('<str:pk>/', views.DetailClientList.as_view(), name='Detail_Client_List')

【讨论】:

  • 以上似乎都适用于r'^(?P&lt;pk&gt;[-\w]+)/$',但不适用于。 (仅供参考我的 2.2.2 中的 django 版本)
  • 您在&lt;str:pk&gt;/? 上遇到错误。 PS。在末尾添加斜线
  • 哦,这成功了!你能解释一下错误是什么,发生了什么吗?泰!在错误中,/ 是在末尾自动添加的,所以我认为这真的不是问题
  • 您必须在末尾添加斜线,否则您必须在settings.py 中写入APPEND_SLASH = True。欲了解更多信息 - morethanseven.net/2009/02/10/append-slashes-urls-django 谢谢。
【解决方案2】:

您可能将url(...)--(Doc) 误解为path(...)--(Doc)

所以,

from django.conf.urls import url

urlpatterns = [
    url(
        r'^(?P<pk>[-\w]+)/$',
        views.DetailClientList.as_view(),
        name='Detail_Client_List'
    ),
]

与以下相同,

from django.urls import path

urlpatterns = [
    path(
        '<str:pk>',
        views.DetailClientList.as_view(),
        name='Detail_Client_List'
    )
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多