Python Django模板:按模型属性访问列表元素
我有一个模型实例列表,希望在视图中为每个实例计算一个值,以便在页面上显示。 当我试图将此值传递给模板时,我被卡住了 我的尝试: 1) 类似于Python Django模板:按模型属性访问列表元素,python,django,templates,model,Python,Django,Templates,Model,我有一个模型实例列表,希望在视图中为每个实例计算一个值,以便在页面上显示。 当我试图将此值传递给模板时,我被卡住了 我的尝试: 1) 类似于{{list.(model.pk)}}-显然是语法错误。我搜索了网络和文档,但找不到有效的语法来计算“点”的特定部分——首先是连接 2) 给模型一个非数据库属性,并使用{{instance.non_db_value}简单地访问它。但模板似乎直接从数据库获取其模型值,因此这也失败了 一个有点难看的解决方案可能是将模型列表中的所有模型实例包装成一个列表,每个列表
{{list.(model.pk)}}
-显然是语法错误。我搜索了网络和文档,但找不到有效的语法来计算“点”的特定部分——首先是连接
2) 给模型一个非数据库属性,并使用{{instance.non_db_value}
简单地访问它。但模板似乎直接从数据库获取其模型值,因此这也失败了
一个有点难看的解决方案可能是将模型列表中的所有模型实例包装成一个列表,每个列表有两个值:第一个是实例本身,第二个是我需要传递给模板的计算值。
有了它,我可以通过如下方式访问值:
{% for entry in wrapperlist %}
{{ wrapperlist.entry.0 }} <-> {{ wrapperlist.entry.1 }}
{% endfor %}
{%用于wrapperlist%中的条目]
{{wrapperlist.entry.0}{{wrapperlist.entry.1}}
{%endfor%}
但我不认为这是不可能的——我是不是想错了方向?有什么建议或想法吗?首先,模板不会直接从数据库获取模型值。对于模板处理器,您的模型实例是另一个对象。因此,完全可以:
#views.py
foo_list = models.Foo.objects.all()
for foo in foo_list:
foo.non_db_property = some_method()
render_to_response('template.html', {'foo_list': foo_list})
在模板中:
{% for foo in foo_list %}
<li>{{ foo.non_db_property }}</li>
{% endfor %}
模板将保持与上面相同django模板过滤器或标记…谢谢,我得到了它-我重构了代码,现在问题神秘地消失了。我所做的主要工作是将Model.objects.all()中的所有条目放入第二个缓冲区列表,因为迭代变量saved.all()(list=Model.objects.all())两次似乎会删除非db值。奇怪。
#models.py
class Foo(models.Model):
bar = models.CharField(max_length=3)
....
def non_db_value(self):
#calculate
return value