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