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('/<int:id>/', 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 获取详细信息