2013-12-16 4 views
5

url`ビルトインタグ `のための文字列引数に変数を拡張する方法:あなたがnameを見ることができるようにDjangoのテンプレート:私は次のテンプレートスニペットの仕事にしようとしています

<ul> 
    {% for name,label in entries.items %} 
    <li><a href="{% url name %}">{{ label }}</a></li> 
    {% endfor %} 
</ul> 

は可変です組み込みのタグurlに渡す前に文字列に展開する必要があります。次の例外で

残念ながら、前述のテンプレートスニペット結果:

Exception Type: TemplateSyntaxError 
Exception Value:  
Caught NoReverseMatch while rendering: Reverse for 'name' with arguments '()' and keyword arguments '{}' not found. 

これを達成するための方法上の任意のアイデアや代替方法?

答えて

2

あなたのコードでは、ジャンゴ> = 1.4のために働く必要があります(IIRC) - nameを想定し有効なurl名に解決され、このurlにはargsやkwargsは必要ありません。 Django 1.3xでは、これを動作させるためにテンプレートに{% load url from future %}を追加する必要があります。 django < 1.3では運が悪いです(カスタムタグを書く必要があります)。しかし、とにかくコードを移植することを検討する必要があります。

+0

これは私が探していた答えです。できます!ありがとう! :) (私はdjango 1.3.7を使用しています) – fstab

3

変数を{% url %} templatetagに渡すことができます。 nameが有効なURLパターン名である場合、このスニペットは機能するはずです。

有効なURLPATTERN名前にnameを変換する必要がある場合は、カスタムフィルタを使用することによってそれを行うことができ、このように:

{% url name|my_filter %} 
+0

お返事ありがとうございます。これはdjango urlリゾルバ関数を呼び出すカスタムフィルタの作成を少し冗長にしているようです。これが私がテンプレート内の解決策を望んでいた理由です。ちなみに – fstab

+0

、 'name'はすでに有効なurlパターン名を含んでいます。 – fstab

+1

@niekas:投稿した例文は、タグではなくフィルタ用です。 –

関連する問題