django应用程序在模板渲染期间获取错误

时间:2015-07-20 17:02:52

标签: python

这是我项目的目录结构

blog
    migration
    templates 
        **blog** 
            __init__.py
            admin.py 
            models.py 
            tests.py 
            urls.py 
            views.py 

        **mysite**
            __init__.py
            settings.py 
            urls.py 
            wsgi.py 

博客是应用程序目录, mysite 是项目目录

这是我的 blog / urls.py

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

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

这是 blogs / static / post_list.py

{% load staticfiles %}
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
        <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
        <link rel="stylesheet" href="{%static "css/blog.css"%}">
</head
<body>
<h1>Testings django project</h1>

{% for posts in post%}
    <h4><a href="{% url "post_detail" pk=post.pk %}">Title:{{posts.title}}</a></h4>
    <p>content:{{posts.text}}</p>
{% endfor %}
</body>
</html>

这是 views.py

来自django.shortcuts导入渲染,get_object_or_404 来自.models import Post

在此创建您的观点。

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

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

以下是

以下错误的详细信息
*Reverse for 'post_detail' with arguments '()' and keyword arguments '{u'pk': ''}' not found. 0 pattern(s) tried: []
Request Method: GET
Request URL:  http://127.0.0.1:8000/
Django Version: 1.8.3
Exception Type: NoReverseMatch
Exception Value:  
Reverse for 'post_detail' with arguments '()' and keyword arguments '{u'pk': ''}' not found. 0 pattern(s) tried: []
Exception Location: C:\Python27\lib\site-packages\django\core\urlresolvers.py in _reverse_with_prefix, line 496
Python Executable:  C:\Python27\python.exe
Python Version: 2.7.9
Python Path:  
['D:\\djangogirls',
 'C:\\Windows\\system32\\python27.zip',
 'C:\\Python27\\DLLs',
 'C:\\Python27\\lib',
 'C:\\Python27\\lib\\plat-win',
 'C:\\Python27\\lib\\lib-tk',
 'C:\\Python27',
 'C:\\Python27\\lib\\site-packages']
Server time:  Mon, 20 Jul 2015 22:26:29 +0545*

2 个答案:

答案 0 :(得分:1)

您应该为对象命名,以指出它们实际上是什么。出于某种原因,您在上下文中使用名称post来引用帖子集;当您遍历模板中的该集时,您调用每个 posts。这并不奇怪,让您感到困惑,因此当您在网址标记中引用帖子的PK时,您错误地引用了post.pk而不是posts.pk

正确命名对象,但不会发生这种情况:

def post_list(request):
    posts = Post.objects.all()
    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})

{% for post in post%}
    <h4><a href="{% url "post_detail" pk=post.pk %}">Title:{{ post.title }}</a></h4>
    <p>content:{{ post.text }}</p>
{% endfor %}

答案 1 :(得分:0)

0 pattern(s) tried: []

您似乎尚未配置网址调度程序以在blogs/urls.py文件中包含网址。请注意,主urls.py文件是proyect目录中的文件。如果要在app目录中添加另一个,则必须明确地执行此操作。

Here您可以看到有关如何执行此操作的文档。基本上,您必须在mysite/urls.py

中添加类似的内容
urlpatterns = [
    url(r'^blog/', include('blog.urls')),
]

现在,您可以使用前缀blog/访问该网址。例如,blog/post/whatever