首页 > 解决方案 > 具有现有数据库条目的 Django 404

问题描述

我对 django 很陌生,目前正在从事我的第一个无指导项目。我遇到了一个对我来说似乎非常不合理且无法自己解决的问题。

基本上,我确实得到了 url 模式匹配,但是也得到了 404 错误,即找不到页面。我已经用各种条目对其进行了测试,结果总是相同的 - 404。

公司/urls.py

from . import views
from django.conf.urls import url

urlpatterns = [
    url(r'^company/(?P<pk>)', views.CompanyDetailView.as_view(), name='company-detail')
]

主要/urls.py

rom django.contrib import admin
from django.urls import include, path


urlpatterns = [
    path('admin/', admin.site.urls),
    path('companies/', include('companies.urls'))
]

这是错误消息:*“找不到页面(404)找不到与查询匹配的公司请求方法:GET请求URL:http: //127.0.0.1 :8080 /companies/company/F/提出者:company.views。 CompanyDetailView 使用 main.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:

行政/

公司/ ^company/(?P) [name='company-detail']

当前路径,company/company/F/,与最后一个匹配。

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

只是补充一下,我可以使用 url 从管理员访问记录

http://127.0.0.1:8080/admin/companies/company/F/change/

真的迷路了,质疑我的理智。

标签: djangodjango-viewsdjango-urls

解决方案


缺少主键的正则表达式部分,例如:

urlpatterns = [
    url(r'^company/(?P<pk>.*)/$', views.CompanyDetailView.as_view(), name='company-detail')
]

如果您使用 aurl(…)那么它希望为参数添加一个正则表达式来捕获该值。如果您没有在括号之间指定任何正则表达式,则该模式被认为是空的,因此参数将是一个空字符串。

我不知道这是否pk是一个好的参数名称,因为您将类似的项目传递F给它。也许这应该重命名为slug或类似的东西。


注意:从开始,不推荐使用url(…)[Django-doc]以支持re_path(…)[Django-doc]。此外,路径转换器还引入了一种新的路径语法:为此,您可以使用path(…)[Django-doc]


推荐阅读