首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django:从db调用对象返回<Queryset [.]>

Django:从db调用对象返回<Queryset [.]>
EN

Stack Overflow用户
提问于 2017-06-22 08:39:13
回答 3查看 54关注 0票数 0

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

代码语言:javascript
运行
复制
<QuerySet [<Post: Test content>, <Post: Second test post>, <Post: Third time's the charm>, <Post: Here is a post.>]>

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

views.py:

代码语言:javascript
运行
复制
  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     )

models.py:

代码语言:javascript
运行
复制
  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

main.html:

代码语言:javascript
运行
复制
  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的人,所以我希望有任何其他的建议或批评。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-22 08:41:53

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

代码语言:javascript
运行
复制
return render(request, 'posts/main.html',                              
    {'post': post_list, 'testvar': testvar},
)

您的模板不会给您提供您声称的输出,因为您从未将post_list作为一个整体显示,也没有显示循环中每个元素的内容。你的意思大概是:

代码语言:javascript
运行
复制
{% for i in post_list %}
    <li>{{ i }}</li>
{% endfor %}

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

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

代码语言:javascript
运行
复制
return render(request, 'posts/main.html',                              
    {'post_list': post_list, 'testvar': testvar},
)
票数 3
EN

Stack Overflow用户

发布于 2017-06-22 08:42:14

views.py中,将返回状态更改为:

代码语言:javascript
运行
复制
return render(request, 'posts/main.html', {'post': post_list, 'testvar': testvar})

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

代码语言:javascript
运行
复制
{% for i in post_list %}
    <li>{{ i }}</li>
{% endfor %}
票数 2
EN

Stack Overflow用户

发布于 2017-06-22 08:42:20

context应该是一个单一的字典,需要多少键:值对就有多少

代码语言:javascript
运行
复制
  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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44694341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档