Django 2.0尝试使用常规表达式获取主键但我获得404

时间:2018-04-15 15:29:46

标签: python django

这是我的代码..

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%}

3 个答案:

答案 0 :(得分:2)

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

路径() re_path()

之间的区别

path()您的网址将被写为;

IEnumerable<int> result = matrix.SelectMany(x => x.Keys);

re_path()

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

检查official documentation以获取有关django2.0

中网址路由的更多信息

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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