我正在尝试实施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_block
和addtoblock
来自django-sekizai包。
答案 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)
{%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