Django Template:按模型属性访问列表元素

时间:2014-01-26 00:56:35

标签: python django templates model

我有一个模型实例列表,想要在我的视图中计算每个模型实例的值,以便在页面上显示它。 当我试图将此值传递给模板时,我陷入了困境。

我的尝试: 1)像{{ list.(model.pk) }}这样的东西 - 显然是语法错误。我搜索了网络和文档,但找不到有效的语法来首先评估“点”-concatenation的特定部分。

2)为模型提供非数据库属性,并使用{{ instance.non_db_value }}简单地访问它。但似乎模板直接从数据库获取其模型值,因此也失败了。

一个有点丑陋的解决方案可能是将模型列表中的所有模型实例包装到单个列表的列表中,每个列表包含两个值:第一个是实例本身,第二个是我需要传递给模板的计算值。 有了这个,我可以使用以下内容访问值:

{% for entry in wrapperlist %}
    {{ wrapperlist.entry.0 }} <-> {{ wrapperlist.entry.1 }}
{% endfor %}

但我不认为这不可能 - 我是在想错误的方向吗?有什么建议或想法吗?

1 个答案:

答案 0 :(得分:0)

首先,模板不直接从DB获取模型值。对于模板处理器,您的模型实例是另一个对象。所以,完全可以:

#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 %}

如果它对您不起作用,请检查错误。

另一种方法是,如果值仅基于模型属性,则创建模型方法:

#models.py
class Foo(models.Model):
    bar = models.CharField(max_length=3)
    ....
    def non_db_value(self):
         #calculate
         return value

模板将保持与上面相同的