【问题标题】:Page not found (404): django cannot match the path找不到页面(404):django 无法匹配路径
【发布时间】:2019-02-02 06:54:51
【问题描述】:

我不明白为什么我得到一个 4040 错误,而我似乎已经正确地拒绝了一切。 Ticket 模型类的实例保存在数据库中,因此从 1 到 5 的 pk 也存在。 html 模板是最简单的,只是为了弄清楚为什么 django 无法获取和呈现请求的实例。请注意,我可以在admin 页面中看到这些实例,并且其他路径(例如添加新票证等)也可以正常工作。任何帮助表示赞赏:

我试图获取的路径/页面:

http://127.0.0.1:8000/ticket/1/

应用程序:urls.py

from . import views

urlpatterns = [
    url(r'^$', views.home, name='home'),
    url(r'ticket/<int:pk>/', views.ticket_detail, name='ticket_detail'),
]

项目:urls.py

from django.conf.urls import url,include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'', include('mmrapp.urls')), 
]

views.py

def ticket_detail(request, pk):
    ticket=get_object_or_404(Ticket,pk=pk)
    return render(request,'mmrapp/ticket_detail.html',{'ticket':ticket})

html

{% extends 'mmrapp/__l_single_column.html' %}
{% load static %}

{% block main_col %}
    <div class="ticket">
        <h2>Ticket: {{ticket.pk}}</h2>
    </div>  

{% endblock main_col %}

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    据我所知,&lt;int:pk&gt; 语法只能通过path 函数(Django 2.0 中的introduced)使用,而不是url,因此您应该使用path 函数或拒绝使用此语法并切换到旧的正则表达式:

    url(r'ticket/(?P<pk>\d+)/', views.ticket_detail, name='ticket_detail')  
    

    您还需要将视图中的pk 参数转换为int,因为使用正则表达式捕获的所有参数都是字符串。

    【讨论】:

    • path 已弃用我猜在我正在使用的 django 1.11 中,url 的语法是什么?
    • @Ibo 编辑了帖子。它在 1.11 中也没有被弃用,相反,它实际上只在 Django 2.0 中引入(比较 1.11 docs2.0 docs
    • 我尝试使用路径但无法导入它,我使用了from django.urls import path 但它给了我cannot import 错误
    • 我尝试了你建议的正则表达式,但我仍然得到 404,我也尝试了url(r'ticket/?P&lt;pk&gt;/\d+/', views.ticket_detail, name='ticket_detail')
    • @Ibo 我假设您的模板中有类似{% url 'ticket_edit' ... %} 的东西,但我在您的应用程序的urls.py 中看不到对ticket_edit 的任何引用,Django 也可能也看不到,这就是为什么你有这个错误。
    猜你喜欢
    • 2021-08-04
    • 1970-01-01
    • 2016-08-01
    • 2016-08-01
    • 2015-10-22
    • 2014-03-20
    • 2020-10-27
    • 2019-07-21
    • 1970-01-01
    相关资源
    最近更新 更多