14

我正在尝试实现 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包。

4

2 回答 2

29

{% 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 %}

希望对您有所帮助。

于 2012-03-21T19:00:17.840 回答
6

{% addtoblock %} 在模板 ( something.html ) 中来自包含标记

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
于 2015-12-04T03:50:49.503 回答