如何仅将对象的一部分发送到django中的模板
Posted
技术标签:
【中文标题】如何仅将对象的一部分发送到django中的模板【英文标题】:how to send just one part of an object to template in django 【发布时间】:2018-02-18 20:59:27 【问题描述】:我只想将对象的一部分发送到模板。
我有 2 个模型,如下所示:
class Person(models.Model):
name = models.CharField(max_legth=50)
sure_name = models.CharFiled(max_length=50)
class Office(models.Model):
location = models.CharField(max_legth=50)
我还创建了如下模型:
class PersonOffice(models.Model):
person = models.ForeignKey(Person)
office = models.ForeignKey(Office)
现在,当我通过PersonOffice.objects.all()
从数据库中获取数据时,数据如下:
"pk": 0,
"person":
"pk":0,
"name":"Harry",
"sure_name":"Potter"
,
"office":
"pk":5,
"location":"Toronto"
,
"pk": 1,
"person":
"pk":6,
"name":"John",
"sure_name":"Kelly"
,
"office":
"pk":6,
"location":"NewYork"
我想通过render
函数将办公室发送到模板。我该怎么做?
谢谢
更新
我想在带有% for %
循环的模板中使用它。例如:
% for office in Offices %
<p>Office location: office.location </p>
% endfor %
我使用了以下代码:
offices = PersonOffice.objects.all().values('office')
print(offices)
以下是终端中的结果:
<QuerySet ['office': 1, 'office': 2, 'office': 11]>
【问题讨论】:
您可以发布您的views.py 文件以显示您当前的渲染位置吗? 你似乎在发送到模板之前序列化你的对象,不知道为什么 没有。我不序列化它们。只是为了在此处显示的一种好方法,我将它们显示为 json 格式。 【参考方案1】:您可以使用values
PersonOffice.objects.values('office')
这将为每个对象输出一个带有office
的查询集。
编辑:
PersonOffice.objects.values('office__location')
【讨论】:
谢谢,我改了问题。通过使用values()
,我不能像 office.location
那样使用。还有什么办法吗?
是的,您可以使用。值还输出一个查询集。另请参阅我的编辑。 @msln
我写了这段代码:% for office in offices % office.location <br>% endfor %
但它没有在 html 文件中显示任何内容
在渲染之前尝试打印上述查询的输出,看看输出是什么。你可能会看到一些东西
如果我只写% for office in offices % office % endfor %
,它会显示我在values()
函数中提到的数据和字段。但我不能单独使用它们。以上是关于如何仅将对象的一部分发送到django中的模板的主要内容,如果未能解决你的问题,请参考以下文章
将对象发送到Django中{%include%}标记中的子模板
Django - 如何正确地将列表从模板发送到 AJAX 以查看?