2016-04-14 9 views
0

モデルをbase.htmlテンプレートに渡したいと思います。Django - カスタムタグが機能しない

カスタムタグについて読みましたが、これを実行しようとしました。それは何のエラーも投げていませんが、あまりにも働いていません。

マイコード:

base.html:今

{% load staticfiles %} 
{% load tags %} 

<!DOCTYPE html> 
<html> 
     <head> 
     </head> 
     <body> 
     <ul class="dropdown-menu" role="menu"> 
      {% for league in get_my_leagues %} 
      <li> ddddd {{ league.league_name }}</li> 
      {% endfor %} 
     </ul> 

     {% block content %} 
     {% endblock %} 
    </body> 
</html> 

、tags.py:

from django.template import Library 
from login.models import League 

register = Library() 

@register.inclusion_tag('base.html') 
def get_my_leagues(): 
    return League.objects.all() 

register.tag('get_my_leagues', get_my_leagues) 
+2

リーグを 'views.py'でロードしてテンプレートに渡すことができない理由はありますか? – Chris

+0

@Chris私はちょうどビューでそれを行い、ベーステンプレートに渡す –

+0

さて、ここには本当に_two_質問があります:(a)あなたは上記の仕事をしなかったのはなぜですか、そして(b)これを行う簡単な方法は?最初に(a)に焦点を当てましょう。あなたはそれがどんな誤りも投げないと言う。 _does_何が起こるか?テンプレートはリーグなしでレンダリングされますか? – Chris

答えて

0

男。

私は自分の問題の解決策を見つけたことを伝えたいと思います。私はコンテキストプロセッサを使ってこの仕事をしています。

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

1

あなたが{% for x in y %}を使用する場合、これはyがあなたのコンテキスト変数であることを期待しますテンプレート、テンプレートタグではありません。

包含タグとは、テンプレート(​​デコレータに引数として渡すもの)をレンダリングし、包含タグが使用されている場所に結果を挿入することです。

あなたはおそらく、(あなたが1.9よりも古いジャンゴを使用している場合、またはassignment tag)の代わりにsimple tagとしてget_my_leaguesを登録したい、とこのようにそれを使用します。

{% get_my_leagues as my_leagues %} 
{% for league in my_leagues %} 
    ... 
{% endfor %} 
+0

Django 1.9は、 'simple_tag'のために' assignment_tag'を非推奨にしています。 – Chris

+0

確かに、私がリンクを指摘したところに書かれているとおりです。私は答えを更新します。 – koniiiik

+0

こんにちは、@koniiiik、 あなたの助言に従うと、ブラウザは私にこのエラーを返します: https://s24.postimg.org/mzvxoorut/1.png –

関連する問題