Django模板中的pythons`vars()`函数

时间:2018-04-03 10:27:41

标签: python django django-templates django-views

在我为Django视图创建的模板中,我传递了一个名为Item的额外变量。 此Item对象具有其包含的值的字符串表示形式。它看起来像这样:

class Item:
    value = ''
    previous_item = Item

    def __str__(self):
        return '%s > %s' % (value, previous_item)

通过这种方式,您可以获得一系列项目:value_x > value_y > value_z

问题是现在我希望能够打印我注入模板的vars对象的Item,就像Python中的vars()函数一样:

>>> item = Item('FooBar', None)
>>> vars(item)

在我的模板中,我想做同样的事情:

<div>
    {{ item }}. {# prints `value_x > value_y > value_z` #}
    {{ vars item }}  {# should print <Item: value_x, None>  or something like that #}
</div>

有没有办法在模板中使用pythons vars()

解决方法

所以现在我使用了一种非常缓慢的方法。 要获取模板变量的vars,请在渲染模板之前自己将变量添加到上下文中:

    ctx = super(MyView, self).get_context(*args, **kwargs)
    ctx['vars'] = vars(self)
    ctx['item_vars'] = vars(self.item)
    return ctx

1 个答案:

答案 0 :(得分:0)

我在Paandittya的帮助下制作了一个简单的解决方案,指出了另一个question,在这种情况下看起来有点像我需要的那样:

@register.simple_tag
    def var(value)
        return vars(value)

然后在模板中加载标签并调用它:

{% load my_tags %}
{% var item %}