2

我有一个在 Django 模板(1.4)中迭代的值元组。其中一些值是必须打印出来的字符串,另一些是包含字符串的元组,必须对其自身进行迭代才能打印出它们的值。在模板中,有没有一种方法可以确定给定值在我遍历主元组时是字符串还是列表(元组)?

4

2 回答 2

11

没有内置的方法可以这样做。一种(恕我直言)解决方法是实现自定义“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>

cf 优秀的 Django 文档了解更多关于自定义过滤器和模板标签的信息:

https://docs.djangoproject.com/en/stable/howto/custom-template-tags/

于 2012-07-04T18:54:14.297 回答
6

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 %}
于 2012-07-04T18:58:07.190 回答