2011-12-06 11 views
3

私はPython/djangoでかなり新しいです。 私はdjangoのテンプレートが大好きですが、見つけることができない再帰的なものが1つありますyesnoフィルタでの複雑な比較?

(おそらく長い)HTMLタグには条件付き属性が1つあります。ほとんどの場合、これは余分なCSSクラスです。

たとえば、言語を切り替えるためのリンクが2つあり、一度に1つだけを有効にしたいとします。私は三項演算子でこれをやった

{% get_language_info for LANGUAGE_CODE as l %} 
<a href="/path/to/switch/to/spanish" 
    class="{% ifequal l.code "es" %} disable {% endifequal %}"> 
    <img src="/spanish/flag/url" alt="Spanish"> 
</a> 
<a href="/path/to/switch/to/english" 
    class="{% ifequal l.code "en" %} disable {% endifequal %}"> 
    <img src="/english/flag/url" alt="English"> 
</a> 
など

他の例項目のリストをレンダリングし、一つの「選択」をチェックすることができる一方で、

他の言語の場合:私は自分自身がこのような何かをやって見つけますしかし、私はそれがpython/djangoの世界では "悪"と考えられていることを知っています:-)

"yesno"フィルタを活用する方法があるのだろうかと思います。私は次のようなことをしようとしました:

{{l.code=="es"|yesno:"disabled,"}} 

しかし、私はそれを動作させることができませんでした...私は何かが不足していますか?

ありがとうございます。

答えて

2

問題は、あなたが投稿したコードであなたの構文で単純です:

{{l.code=="es"|yesno:"disabled,"}} 

それが実際のように処理されています:

{{ l.code=={{"es"|yesno:"disabled,"}} }} 

(注:このコードは動作しません、それは単にするためのものですDjangoがそれを読む方法を説明します)

if templatetagのように機能しますが、yesnoフィルのようなカスタムテンプレートタグが必要ですr。 djangosnippets.comのようなものを検索することができます。誰かがすでにあなたのために仕事をしているかもしれません。さもなければ、私はそれらの2つのDjangoソースコードを見て、あなた自身のtemplatetagにそれらをマージしようと勧めます。

0

または、jQuery/javascriptを使用してクラスを設定することができます。 http://api.jquery.com/attr/ このようなものはテストされていません。

{% get_language_info for LANGUAGE_CODE as l %} 

<script> 
{% if l.code='es' %} 
    $('.english').attr('class','disable'); 
{% else %} 
    $('.english').attr('class','disable'); 
{% endif %} 
</script> 



<a href="/path/to/switch/to/spanish" 
    id="spanish" class='enable"> 
    <img src="/spanish/flag/url" alt="Spanish" > 
</a> 
<a href="/path/to/switch/to/english" 
    id="english" class='enable"> 
    <img src="/english/flag/url" alt="English"> 
</a> 
関連する問題