Djangoテンプレート(1.4)で反復している値のタプルがあります。一部の値は出力する必要のある文字列であり、その他の値は文字列を含むタプルであり、値を出力するにはそれ自体を繰り返す必要があります。テンプレート内で、マスタータプルを反復処理するときに、指定された値が文字列なのかリスト(タプル)なのかを判断できる方法はありますか?
質問する
2853 次
2 に答える
11
そうするための組み込みの方法はありません。(やや汚いIMHO)回避策は、カスタムの「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/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 に答える