我正在尝试在浏览器上使用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的新手,对不起,如果问题是基本的,感谢您的回答!
答案 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>