运行Django时,“反向”意味着什么?

时间:2017-07-16 08:35:54

标签: python django

我正在尝试在浏览器上使用django运行博客构建。我收到了这个错误:

NoReverseMatch at /   
Reverse for 'blog.views.post_detail' not found.
'blog.views.post_detail' is not a valid view function or pattern name.

我的应用的 url.py 如下所示:

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

urlpatterns = [
    url(r'^$', views.post_list),
    url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail),
]

当我输入 127.0.0.1:8000 / 时,似乎 该网址将指向views.post_list 我的 views.py 看起来像是:

from django.shortcuts import render, get_object_or_404
from .models import Post

def post_list(request):
    posts = Post.objects.filter(published_date__isnull=False)
    return render(request, 'blog/post_list.html', {'posts': posts}

def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    return render(request, 'blog/post_detail.html', {'post': post})

post_list()将使用 post_list.html 呈现请求 在 post_list.html 中,错误来自以下行:

<h1><a href="{% url 'blog.views.post_detail' pk=post.pk %}">{{ post.title }}</a></h1>  

我真的不明白错误消息中的“反向”含义。 'blog.views.post_detail'确实存在于 views.py 中。我想我得到了代码所需的一切,但无法弄清楚出了什么问题。

我是django的新手,对不起,如果问题是基本的,感谢您的回答!

3 个答案:

答案 0 :(得分:0)

您的urls.py似乎应如下所示:

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

urlpatterns = [
    url(r'^$', views.post_list),
    url(r'^(?P<pk>\d+)/$', views.post_detail),
]

答案 1 :(得分:0)

您应该为网址定义名称:

urlpatterns [
   url(r'^$', views.post_list,name=post_list),
]

然后像这样使用url标签:

<a href="{% url 'AppName:post_list' %}"></a>

AppName是你的django应用程序名称。

答案 2 :(得分:0)

Django 1.10删除了通过视图点缀导入路径反转网址的功能。相反,您需要命名您的网址格式并使用该名称来反转网址:

urlpatterns = [
    url(r'^$', views.post_list, name='post-list'),
    url(r'^(?P<pk>\d+)/$', views.post_detail, name='post-detail'),
]

在你的模板中:

<h1><a href="{% url 'post-detail' pk=post.pk %}">{{ post.title }}</a></h1>