我有一个值的元组,我正在Django模板中迭代(1.4)。一些值是必须打印出来的字符串,其他值是包含字符串的元组,必须自己迭代才能打印出它们的值。在模板中是否有一种方法可以决定,当我迭代主元组时,给定值是字符串还是列表(元组)?
答案 0 :(得分:7)
没有内置的方法可以做到这一点。一个(有点脏的恕我直言)解决方法是实现一个自定义的“is_string”过滤器,但最好的解决方案是预处理视图中的值,使其成为元组(或列表)的统一列表。
用于过滤器解决方案:
@register.filter
def is_string(val):
return isinstance(val, basestring)
然后在你的模板中:
<ul>
{% for whatever in something %}
<li>
{% if whatever|is_string %}
{{ whatever }}
{% else %}
<ul>
{{ whatever|unordered_list }}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
参见优秀的Django文档,了解有关自定义过滤器和模板标签的更多信息: https://docs.djangoproject.com/en/1.4/howto/custom-template-tags/
答案 1 :(得分:5)
您可以在视图或帮助程序模块中创建isinstance
过滤器:
from django.template.defaultfilters import register
@register.filter(name="isinstance")
def isinstance_filter(val, instance_type):
return isinstance(val, eval(instance_type))
然后在模板中你可以做到:
{% load isinstance %}
{% if some_value|isinstance:"list" %}
// iterate over list
{% else %}
// use string
{% endif %}