找不到页面(404):django无法匹配路径

时间:2018-08-27 17:32:36

标签: django django-templates django-views

我不明白为什么我会收到4040错误,但似乎我已经正确地反抗了所有内容。 Ticket模型类的实例已保存在数据库中,因此pk从1到5也存在。 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 %}

1 个答案:

答案 0 :(得分:2)

据我所知,<int:pk>语法仅通过path函数(在Django 2.0中为introduced)可用,而不是url,因此应使用path函数或拒绝使用此语法并切换到旧的正则表达式之一:

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

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