2013-04-25 19 views
10

私のDjangoテンプレートでは、複数の場所で使用できるように、名前付きURLの値をwithブロック内の変数に代入する必要があります。Djangoテンプレートの変数に名前付きURLの値を代入

私はこのような何かを達成する必要があります:

{% for tag in post.tags.all %} 
    {% with tagabs={%url showtag tag%} %} 
      <li><a href="{{tagabs}}">#{{tag}}</a></li> 
    {% endwith %} 
{% endfor %} 

をしかし、明らかにそれは動作しませんし、構文解析エラーで終わるでしょう。上記の例は、{{tagabs}}の代わりに{%url showtag tag%}を使用し、withブロックを削除するという単純なシナリオです。しかし私のシナリオではtagabsの値をいくつかの場所やif文の中で比較する必要があります。

ありがとうございました。

+0

あなたは大きな問題に少し詳細情報をください与えてもらえますか? – rockingskier

答えて

31

なぜ機能がコアにある場合、新しいテンプレートタグ/フィルタを作成するのですか?

でサンプルを見て:https://docs.djangoproject.com/en/dev/ref/templates/builtins/#url

{% url 'path.to.view' arg arg2 as the_url %} 

<a href="{{ the_url }}">I'm linking to {{ the_url }}</a> 

{% url 'path.to.view' as the_url %} 
{% if the_url %} 
    <a href="{{ the_url }}">Link to optional stuff</a> 
{% endif %} 
+0

優れた提案、間違いなく新しいタグよりもエレガントです。ありがとう! –

-4

この問題を管理するには、template tagを作成するか、ビューに必要なデータを作成してテンプレートに渡す必要があります。

including別のテンプレートを使って、あなたの定義した変数を送信することができますが、私はそれを疑っています。

Djangosテンプレートシステムの背後にある考え方は、テンプレートにあまり論理がないようにすることです。したがって、ビューに出力するために必要なデータを準備するか、テンプレートタグを作成することに戻ります。

+0

urlタグが既に仕事をしているときに、なぜホイールを再発明するか??? –

+0

私が知っている方法は、私が知っているコア動作と一致しませんでした。それが私のところに来たのは、単純にURLの名前を付けるだけでなく、ビュー内で複雑な操作をしようとする人でした。 – gaqzi

関連する問題