0

我正在尝试建立一个非常简单的博客应用程序,同时显示我数据库中的所有帖子。但是,我的四个帖子在页面上显示为

<QuerySet [<Post: Test content>, <Post: Second test post>, <Post: Third time's the charm>, <Post: Here is a post.>]>

我也无法像烧瓶一样将任何第二个变量传递给 html 模板:testvar 根本不显示,即使它在 html 模板中。这些问题有关系吗?如何在页面上获取多个变量,如何使帖子看起来像常规文本?

视图.py:

  1 from django.shortcuts import render
  2 from django.http import HttpResponse
  3
  4 from .models import Post
  5
  6 def post(request ):
  7     testvar = "TEST VARIABLE PLZ IGNORE"
  8     post_list = Post.objects.order_by('id')
  9
 10     return render(request, 'posts/main.html',
 11             {'post': post_list}, {'testvar': testvar},
 12     )

模型.py:

  1 from django.db import models
  2
  3 class Post(models.Model):
  4     content = models.CharField(max_length = 200)
  5
  6     def __str__(self):
  7         return self.content

主.html:

  1 <head>                                                      
  2   <h1>{{ post }}</h1>
  3
  4 </head>
  5
  6 <body>
  7   {{ testvar }}
  8   {% for i in post_list %}
  9   <li>i</li>
 10   {% endfor %}
 11 </body>

我是 django 的新手,所以如果有任何其他建议或批评,我将不胜感激。谢谢。

4

3 回答 3

3

首先,您需要将一个字典传递给render

return render(request, 'posts/main.html',                              
    {'post': post_list, 'testvar': testvar},
)

您的模板不会为您提供您声称的输出,因为您永远不会显示post_list整体或循环中每个元素的内容。大概你的意思是:

{% for i in post_list %}
    <li>{{ i }}</li>
{% endfor %}

编辑正如 Sayse 在评论中指出的那样,变量名称之间存在不匹配。您将帖子列表传递为post,因此当您{{ post }}在模板中执行时,您会打印整个列表。根本没有调用变量post_list,因此模板底部的循环甚至永远不会执行。

您应该使用一致的名称;post_list似乎更合适。

return render(request, 'posts/main.html',                              
    {'post_list': post_list, 'testvar': testvar},
)
于 2017-06-22T08:41:53.203 回答
2

在您views.py将退货声明更改为:

return render(request, 'posts/main.html', {'post': post_list, 'testvar': testvar})

因为 render 的第三个参数需要一个字典。此外,为了在您的模板中呈现帖子,您应该将帖子打印为

{% for i in post_list %}
    <li>{{ i }}</li>
{% endfor %}
于 2017-06-22T08:42:14.287 回答
1

应该是一个字典,context包含尽可能多的键:值对

  6 def post(request ):
  7     testvar = "TEST VARIABLE PLZ IGNORE"
  8     post_list = Post.objects.order_by('id')
  9
 10     return render(request, 'posts/main.html',
 11             {'post': post_list, 'testvar': testvar},
 12
于 2017-06-22T08:42:20.870 回答