为什么我在Django的/ blog /获得NoReverseMatch

时间:2017-08-03 09:19:31

标签: python django

我目前正在阅读“Django by Example”一书,第1章:构建博客应用程序,当我尝试访问127.0.0.1:8000/blog/时出现以下错误

   / blog /

中的NoReverseMatch      

使用参数'(2017,'08','03'反转'post_detail',   找不到'new-title')'和关键字参数'{}'。 1种模式   尝试:   ['博客/ / / / ^(P \ d {4}?)(P \ d {2}?)(P \ d {2}?)(P [ - ?\ W] +)   / $']

这是我的templates / blog / base.html文件

{% load staticfiles %}

<!DOCTYPE html>

<html>
<head>
  <title>{% block title %} {% endblock %}</title>
  <link href="{% static "css/blog.css" %}" rel="stylesheet">
</head>
<body>
  <div id = "content">
    {% block content %}
    {% endblock %}
  </div>

  <div id = "sidebar">
    <h2> My Blog</h2>
      <p> This is my blog </p>
  </div>
</body>
</html>

和我的templates / blog / post / list.html文件

{% extends "blog/base.html" %}

{% block title %}My Blog {% endblock %}

{% block content %}
  <h1> My Blog </h1>
  {% for post in posts %}
    <h2>
      <a href="{{ post.get_absolute_url }}">
        {{ post.title }}
      </a>
    </h2>
    <p class="date">
      Published {{ post.publish }} by {{ post.author }}
    </p>

    {{ post.body|truncatewords:30|linebreaks }}
  {% endfor %}
{% endblock %}

我似乎无法找到问题所在,所以我将非常感谢您的帮助。

如果它有帮助,我在Linux系统上使用Django 1.8.6和Python 3.6.2与virtualenvwrapper。

2 个答案:

答案 0 :(得分:2)

你的正则表达式中至少有两个错误。

首先,在最终模式之前你有一个迷路^。这意味着&#34;匹配字符串&#34;的开头,所以将它放在字符串的中间将始终失败。

其次,你在最后的斜线之前有一个空格。

答案 1 :(得分:0)

你缺少的是&#34; post_detail&#34;的反向网址。您需要一个名称值为&#34; post_detail&#34;。

的网址

将此添加到urls.py

url(r'^blog/(?P\d{4})/(?P\d{2})/(?P\d{2})/^(?P[-\w]+) /$'', views.post_detail, name='post_detail'),

你的观点也应该接受正则表达式;

def post_detail(request, pattern):
    ....
    return render(request, template, context)