2016-04-14 77 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

好吧,所以這裏真的有兩個問題:(a)爲什麼你不做以上工作,(b)有沒有更簡單的方法來做到這一點?首先關注(a)。你說它不會拋出任何錯誤。什麼_does_發生?模板渲染時是否沒有任何聯賽? – Chris

回答

0

傢伙。

我在這裏只是爲了說明我找到了解決問題的方案。我正在使用上下文處理器來完成這項工作。

謝謝大家的回答!

1

當您使用{% for x in y %},這個預計y是在上下文中的變量模板,而不是模板標籤。

包含標記的作用是呈現一個模板(作爲參數傳遞給​​裝飾器的模板),並將結果插入到使用包含標記的位置。

你可能想註冊get_my_leaguessimple tag,而不是(或assignment tag,如果你使用Django 1.9以上),並使用它像這樣:

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

請注意,Django 1.9棄用'assignment_tag'以支持'simple_tag'。 – Chris

+0

事實上,正如我指出鏈接所寫的那樣。我會更新答案。 – koniiiik

+0

嗨,@ koniiiik, 當我按照你的建議,瀏覽器返回給我這個錯誤: https://s24.postimg.org/mzvxoorut/1.png –