Django 页面视图引用id,而path不要求id

Django 页面视图引用id,而path不要求id,django,django-urls,Django,Django Urls,我想加载默认的django页面。没什么特别的。但是,我得到的错误提示id设置不正确 “字段'id'需要一个数字,但得到'zoekboek'。” 这里令人困惑的事情(我是django初学者,因此如果这对您来说一点都不困惑,我也不会感到惊讶): URL.py中此页面的路径没有要求id 视图还没有查询任何内容(我发现一些帖子有类似的错误, 但与过滤器相关) 调试信息指向另一个确实正在请求id的视图 当我在路径的开始添加斜线时,错误消失了 代码 url.py urlpatterns=[ 路径(“”

我想加载默认的django页面。没什么特别的。但是,我得到的错误提示id设置不正确

“字段'id'需要一个数字,但得到'zoekboek'。”

这里令人困惑的事情(我是django初学者,因此如果这对您来说一点都不困惑,我也不会感到惊讶):

  • URL.py中此页面的路径没有要求id
  • 视图还没有查询任何内容(我发现一些帖子有类似的错误, 但与过滤器相关)
  • 调试信息指向另一个确实正在请求id的视图
  • 当我在路径的开始添加斜线时,错误消失了
代码

url.py

urlpatterns=[
路径(“”,views.scholen,name='scholen'),
路径(“”,views.school\u detail,name='school\u detail'),
路径(“/”,views.school\u groep,name='school\u groep'),
路径('/',views.leerling_页面,name='leerling_页面'),
路径('zoekboek',views.zoekboek,name='zoekboek'),

]
简单修复:将
路径('zoekboek',views.zoekboek,name='zoekboek'),
从URL中的最后一位移动到第二位

为什么?

因为Django URL是使用正则表达式解析的;在第3点中,我们可以说:

  • Django按顺序运行每个URL模式,并在与请求的URL匹配的第一个模式处停止,与
    path\u info
    匹配
  • 由于您的URL路径
    path(“”,views.school\u detail,name='school\u detail'),
    非常通用,它匹配任何字符串,包括字符串
    zoekboek
    ;因此,对
    zoekboek
    的请求位于URL配置的第二行,并被路由到视图
    school\u detail()
    ,该视图需要一个
    school\u id


    建议:为了使URL处理更容易,以便您可以随意排序URL路径,您可以稍微更改URL并添加前缀(例如
    school/
    ),以便没有任何字符串与URL路径匹配。例如,这项工作:

    urlpatterns = [
        path('', ...),
        path('school/<school_id>', ...),
        path('school/<school_id>/<groep_id>', ...),
        path('school/<school_id>/<groep_id>/<UserProfile_id>', ...),
        path('zoekboek', ...),
    
    ]
    
    urlpatterns=[
    路径(“”,…),
    路径('school/',…),
    路径('school/',…),
    路径(“学校//”,…),
    路径('zoekboek',…),
    ]
    
    简单修复:将
    路径('zoekboek',views.zoekboek,name='zoekboek'),
    从URL中的最后一位移动到第二位

    为什么?

    因为Django URL是使用正则表达式解析的;在第3点中,我们可以说:

  • Django按顺序运行每个URL模式,并在与请求的URL匹配的第一个模式处停止,与
    path\u info
    匹配
  • 由于您的URL路径
    path(“”,views.school\u detail,name='school\u detail'),
    非常通用,它匹配任何字符串,包括字符串
    zoekboek
    ;因此,对
    zoekboek
    的请求位于URL配置的第二行,并被路由到视图
    school\u detail()
    ,该视图需要一个
    school\u id


    建议:为了使URL处理更容易,以便您可以随意排序URL路径,您可以稍微更改URL并添加前缀(例如
    school/
    ),以便没有任何字符串与URL路径匹配。例如,这项工作:

    urlpatterns = [
        path('', ...),
        path('school/<school_id>', ...),
        path('school/<school_id>/<groep_id>', ...),
        path('school/<school_id>/<groep_id>/<UserProfile_id>', ...),
        path('zoekboek', ...),
    
    ]
    
    urlpatterns=[
    路径(“”,…),
    路径('school/',…),
    路径('school/',…),
    路径(“学校//”,…),
    路径('zoekboek',…),
    ]
    
    你能发布完整的错误消息吗?简单的修复方法是:将
    路径('zoekboek',views.zoekboek,name='zoekboek'),
    从你记忆中的最后一位移到第二位urls@Ralf哇,真是妙计!我不知道路径的顺序很重要。谢谢!!你能发布完整的错误消息吗?简单的修复方法是:将
    path('zoekboek',views.zoekboek,name='zoekboek'),
    从你的最后一位移到第二位urls@Ralf哇,真是妙计!我不知道路径的顺序很重要。谢谢!!很好的解释。我想我需要开始使用正则表达式:)谢谢!很好的解释。我想我需要开始使用正则表达式:)谢谢!