Django 2.0 尝试使用正则表达式获取主键,但我得到 404

Posted

技术标签:

【中文标题】Django 2.0 尝试使用正则表达式获取主键,但我得到 404【英文标题】:Django 2.0 Trying to Grab the primary key with regular Expressions but im getting 404 【发布时间】:2018-09-25 09:15:26 【问题描述】:

这是我的代码..

urlpatterns =[
path('',views.School_Lview.as_view(),name='list'),
path('(?P<pk>\d+)/',views.School_Dview.as_view(),name='detail')
]

我正在尝试让这个模板工作

% for school in schools %
<h2><li><a href="school.id"> school.name</a></li></h2>
% endfor%

【问题讨论】:

我正在尝试链接特定学校(以及其他学校)详细视图.. 在 url 中试试这个,your_app_name/'(?P\d+)/ 它说应用程序未定义..我正在使用 django2.0 所以 url() 不起作用所以我使用路径..***.com/questions/47947673/… 它应该可以工作,你做错了什么,你有没有在settings.py中注册你的应用程序???? 感谢@Sagar 的帮助 【参考方案1】:

我修复了它...我使用了 re_path 而不是路径,它就像一个魅力..

re_path('(?P<pk>\d+)/',views.School_Dview.as_view(),name='detail')

【讨论】:

【参考方案2】:

django2.0 不支持在 django.urls.path() 中使用正则表达式,否则如果你真的想在你的 url 中写正则表达式,我会建议你使用 django.urls.re_path() 这是旧版本的新功能 django.conf.urls.url

path()re_path()

的区别

使用 path() 你的网址会写成:

from urls import path
urlpatterns =[
   path('',views.School_Lview.as_view(),name='list'),
   path('<int:pk>/',views.School_Dview.as_view(),name='detail')
]

使用 re_path()

from urls import path
 urlpatterns =[
    re_path('',views.School_Lview.as_view(),name='list'),
    re_path('(?P<pk>\d+)/',views.School_Dview.as_view(),name='detail')
 ]

查看official documentation 以了解有关 django2.0 中 url 路由的更多信息

【讨论】:

【参考方案3】:

虽然答案是正确的,但我只是想指出 Django 实际上使用正则表达式 [0-9]+ 而不是 \d+ 作为主键。

它们都具有相同的效果,但here 您可以看到隐藏在“新”路径语法后面的所有默认转换器及其正则表达式。

【讨论】:

以上是关于Django 2.0 尝试使用正则表达式获取主键,但我得到 404的主要内容,如果未能解决你的问题,请参考以下文章

django1.0和django2.0的基于正则表达式的url区别

获取 Django url 正则表达式中的多个参数

Django 2.0 Release note阅读简记

django url 正则表达式不匹配

Django 路由系统(URLconf)

使用 Django ORM 中的列过滤器获取主键 ID