2016-11-18 8 views
0

私は時々リストを渡したいと思うDjangoのテンプレートを持っています。そして時には単一の値を渡すのが好きです。どのようにテンプレートが与えられたのかを教えることができますか?Djangoのテンプレートでリストを非リストからどのように伝えるのですか?

私は値がこれらのいずれかのように設定されるだろうと思っています:

:次に、テンプレートは次のようになりますコードを持っているでしょう

context = { 
    'foo' : ['bar', 'bat', 'baz'] 
} 

context = { 
    'foo' : 'bar 
} 

{% if foo isa list %} 
    {% for item in foo %} 
     {{ item }}<br> 
    {% endfor %} 
{% else %} 
    {{ item}}<br> 
{% endif %} 

たとえば、fooやfoolistを設定して、どちらか一方を確認することができます。しかし、fooがリストであるかどうかはちょっとわかります(imo)。

答えて

0

あなたはこのようにそれをするつもりなら、それというのチェックを追加format(文字列の場合)メソッドを持たず、インデックスが0である場合は、そのリストは単一の値とみなされます

{% if foo.0 and not foo.format %} 
    {% for item in foo %} 
     {{ item }}<br> 
    {% endfor %} 
{% else %} 
    {{ item}}<br> 
{% endif %} 
+1

しかし、 'foo'が文字列の場合、' foo.0'は最初の文字を返しませんか? –

+0

ええ、そうです。更新された回答 – falloutcoder

+0

コードはすばらしくシンプルで、人々は理解しやすく、既存のコードによく合うはずです。ありがとう! – tewok

0

あなたのアプローチは不必要に複雑であると思います。 私はリストとなるだろう:

views.py

foo_list = ['bar'] 
context = { 
    'foo': foo_list, 
    'foo_len': len(foo_list), 
} 

テンプレート

{% if foo_len == 1 %} 
    {{ foo.0 }} 
{% else %} 
    {% for item in foo %} 
     {{ item }} 
    {% endfor %} 
{% endif %} 
+0

これは不必要に複雑かもしれませんが、レガシーコードで使用する必要があります。私が記述する方法は、コード、コーダー、スケジュールを幸せに保つ最も簡単な方法です(おそらく)。提案していただきありがとうございます。 – tewok

関連する問題