django sekizai {%addtoblock%}标签无法正常工作

时间:2012-03-21 14:20:06

标签: django django-templates django-sekizai

我正在尝试实施django sekizai应用程序。它正在复制我正在添加的js文件。

基本模板:

{% load sekizai_tags %}
...
{% render_block "my_js" %}

使用此基础的模板:

{% load sekizai_tags %}
<div id="a1" >
    {% addtoblock "my_js" %}
        <script type="text/javascript" src="{{ MEDIA_URL }}js/my_js.js"></script>
    {% endaddtoblock %}
</div>
{% addtoblock "my_js" %}
    <script type="text/javascript" src="{{ MEDIA_URL }}js/my_js.js"></script>
{% endaddtoblock %}

现在渲染的模板已经呈现了两次。但是当我尝试在div中添加相同的脚本时,它没有重复。如果有人能够对此有所了解,我将不胜感激!

此外,当我尝试在模板标记呈现的模板中使用{%addtoblock%}时,脚本会丢失(它既不包含也不保留在该模板中)。

注意:模板标记render_blockaddtoblock来自django-sekizai包。

2 个答案:

答案 0 :(得分:27)

{% addtoblock %}{% endaddtoblock %}必须位于继承其他模板的模板中的块内。

# base.html
<html>
    ...
    {% render_block 'js' %}
    {% block js %}{% endblock %}
</html>


# some-page.html
{% inherits 'base.html' %}

{% block js %}
    {% addtoblock 'js' %}
        <script type="text/javascript" ... />
    {% endaddtoblock %}
{% endblock %}

希望能帮到你。

答案 1 :(得分:5)

包含标记中的模板( something.html )中的

{%addtoblock%}:

from django import template
from django.conf import settings

register = template.Library()

@register.inclusion_tag('something.html', takes_context=True)
def render_something(context, some_arg):
    sezikai_ctx_var = getattr(settings, 'SEKIZAI_VARNAME', 'SEKIZAI_CONTENT_HOLDER')
    attrs = {
        'some_arg': some_arg,
        sezikai_ctx_var: context[sezikai_ctx_var]
    }
    return attrs