2

Djangoテンプレート(1.4)で反復している値のタプルがあります。一部の値は出力する必要のある文字列であり、その他の値は文字列を含むタプルであり、値を出力するにはそれ自体を繰り返す必要があります。テンプレート内で、マスタータプルを反復処理するときに、指定された値が文字列なのかリスト(タプル)なのかを判断できる方法はありますか?

4

2 に答える 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 に答える