如何判断值是Django模板中的字符串还是列表?

时间:2012-07-04 18:45:38

标签: python django templates django-templates

我有一个值的元组,我正在Django模板中迭代(1.4)。一些值是必须打印出来的字符串,其他值是包含字符串的元组,必须自己迭代才能打印出它们的值。在模板中是否有一种方法可以决定,当我迭代主元组时,给定值是字符串还是列表(元组)?

2 个答案:

答案 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 %}