我对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/由:companies.views.CompanyDetailView提出使用在main中定义的URLconf。Django尝试了以下URL模式,顺序如下:
管理/
公司/^公司/p (?) [name = ' company-detail ']
当前路径companies/company/F/与上一个路径匹配
你看到这个错误是因为你在Django设置文件中设置了DEBUG = True。将其改为False, Django将显示一个标准的404页面。"*
我可以用url 从admin访问记录。http://127.0.0.1:8080/管理/企业/公司/F/改变/
真的迷失在这里,质疑我的理智。
缺少主键的正则表达式部分,例如:
urlpatterns = [
url(r'^company/(?P<pk>.*)/$', views.CompanyDetailView.as_view(), name='company-detail')
]
如果您使用url(…)
,那么它期望您为参数添加一个正则表达式来捕获值。如果在括号之间没有指定任何正则表达式,则模式被认为是空的,因此参数将是一个空字符串。
我不知道pk
是否是一个好的参数名称,因为您将F
之类的项传递给它。也许它应该重命名为slug
或类似的东西。
注意从django-3.1开始,
url(…)
(Django-doc)不支持re_path(…)
[Django-doc]。此外,路径转换器还引入了一种新的路径语法:you使用path(…)
[Django-doc] .