Django - 自定义标记不起作用

时间:2016-04-14 12:13:45

标签: django

我想将模型传递给模板base.html。

我读到了自定义标签,并尝试执行此操作。它没有抛出任何错误,但也没有工作。

我的代码:

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 个答案:

答案 0 :(得分:1)

使用{% for x in y %}时,预计y是模板中的上下文变量,而不是模板标记。

包含标记的作用是呈现模板(作为参数传递给inclusion_tag装饰器的模板),并将结果插入到使用包含标记的位置。

您可能希望将get_my_leagues注册为simple tag(或者assignment tag,如果您使用的是早于1.9的Django),并按照以下方式使用它:

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

答案 1 :(得分:0)

人。

我在这里只是为了告诉我找到了解决问题的方法。我使用Context Processors来完成这项工作。

谢谢大家的回答!

相关问题