Django - 详细视图 URL 中的模型 ID,第一个 ID 不起作用

Posted

技术标签:

【中文标题】Django - 详细视图 URL 中的模型 ID,第一个 ID 不起作用【英文标题】:Django - Model id in Detail View URL, 1st id not working 【发布时间】:2019-08-05 15:28:23 【问题描述】:

我有一个模型,Position,我创建了一个详细视图来查看每个单独的位置。

views.py

def position_detail_view(request, id=None):

    position = get_object_or_404(Position, id=id)

    context= 
        'object': position,
    

    return render(request, 'positions/position_detail.html', context)

位置/urls.py

from django.urls import path, include
from .views import position_list_view, position_detail_view

urlpatterns = [
    path('', position_list_view),
    path('<int:id>', position_detail_view, name='detail')
]

当我转到 id=1 的 http://localhost:8000/apply/1/ 时,我得到一个 Page Not Found 404 错误。但是,对于任何其他 id,页面加载得很好。关于为什么模型中的第一个 id 给出 404 错误的任何想法?

编辑 1:回溯错误

找不到页面 (404) 请求方法:GET 请求 URL:http://localhost:8000/apply/1/ 使用中定义的 URLconf bta_website.urls,Django 尝试了这些 URL 模式,顺序如下:

admin/ [name='home'] 申请/申请/申请/申请/ [name='detail'] 当前路径 apply/1/ 与其中任何一个都不匹配。

您看到此错误是因为您的 Django 中有 DEBUG = True 设置文件。将其更改为 False,Django 将显示 标准 404 页面。

【问题讨论】:

您确定数据库中存在 id 为 1 的对象吗? @ShafikurRahman 是的,我刚刚检查了数据库和管理员以确认存在 id=1 的对象。 添加完整的错误回溯 现在在帖子中。 将url路径更改为path('/&lt;int:id&gt;/', position_detail_view, name='detail') 【参考方案1】:

Django get_object_or_404 如下所示。

get_object_or_404(klass, *args, **kwargs)

在给定的模型管理器上调用 get(),但它引发 Http404 而不是模型的 DoesNotExist 异常。 在你的情况下, 您的 URL 路径配置不正确。 尝试对此进行更改:

path('/<int:id>/', position_detail_view, name='detail')

【讨论】:

以上是关于Django - 详细视图 URL 中的模型 ID,第一个 ID 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Django Rest 框架 URL 中通过唯一 ID 但不是 PK 获取详细信息

如何在搜索结果中请求该模型详细视图的 url?

Django在forms.py中使用视图或url中的变量

Django - 将模型名称从 url 传递给视图

如何根据 django 模板中的不同提交按钮在更新视图中自定义成功 url?

与 Django 通用视图中的 pk 不同的 url 路径