2017-01-13 6 views
1

私は小さなサイトを構築するDjangoを学んでいます。オブジェクトをリストする多くのテンプレートがあり、それぞれにリンクがあります。 私は、カスタムテンプレートタグを作ることができると思った、カスタムテンプレートタグにurlタグを渡すにはどうすればよいですか?

{% object_list some %} 

someのようなものはobj_list私はプリントアウトしてアイテムを指すlinkすべきいくつかのURL構造にしたいオブジェクトのリストである辞書{'list': obj_list, 'link': link}です。

(object_list.htmlと呼ばれる)のテンプレートが今

{% for object in object_list %} 
    <li><a href="{% url myapp:object object.id %}">{{object.name}}</a></ 
{% endfor %} 

ようになっているはずです、私の問題は、私は、URLに何をすべきかわからないということです。私はそれが 'myapp:object'が引数 'link'に置き換えられるように柔軟性を持たせたいと思います。例えば、オブジェクトタイプがUserの場合、私は{%url myapp:user user.id%}を使います。

これは可能ですか?どうやって?

私は、フォームの引数として'myapp:myobject'を与える

{% for object in object_list %} 
    {% url 'link' as my_url %} 
    <li><a href="{% url my_url object.id %}">{{object.name}}</a></li> 
{% endfor %} 

で、this solutionを試してみましたが、それは動作しません。 property_dictが私の議論で、templatetag/property_extras.pyタグが保存されたファイルである

{% load property_extras %} 
{% object_list property_dict %} 

テンプレートでは、正確には、私はカスタム-without通常のテンプレートを使用している場合、それは動作しますタグ - (NoReverseMatchエラーを与えます)。詳細については

あなたは文字列リテラル'link'を使用している、とあなたがオブジェクトIDが含まれていないので、私のテンプレートタグは

{% url 'link' as my_url %}動作しませんを使用して
@register.inclusion_tag('properties/object_list.html') 
def object_list(object_dict): 
    print(object_dict['list']) 
    print(object_dict['link']) 
    return { 
     'object_list': object_dict['list'], 
     'link': object_dict['link'], 
     } 

答えて

4

私はあなたが

{% for object in object_list %} 
    <li><a href="{{ object.get_absolute_url }}">{{object.name}}</a></li> 
{% endfor %} 

を使用して、完全に{% url %}の使用を取り除くことができると信じて。お使いのモデルにメソッドget_absolute_urlを定義することは、documentationに従って問題を解決する推奨方法です。

2

です。あなたが意味するか:

{% url link object.id as my_url %} 

あなたはmy_urlに結果を保存なぜあなたはどこでもmy_urlを使用していないので、それは明らかではありません。たぶん、あなたは次の行になりたい:

<a href="{{ my_url }}">{{object.name}}</a></li> 

しかし、私はあなたが本当にここas my_urlを必要としないと思います。それは静かに間違いを呑み込みます。あなたはおそらくそれを望ましくないでしょう。何をする単純な次のようになります。

<a href="{% url link object.id as my_url %}">{{object.name}}</a></li> 
関連する問題