Значок django sekizai {% addtoblock%} работает неправильно
Я пытаюсь реализовать приложение 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 %}
Теперь здесь визуализированный шаблон визуализировался дважды. Но когда я попытался добавить тот же script в div, он не был дублирован. Был бы оценен, если кто-то может пролить свет на это!
Также, когда я пытаюсь использовать {% addtoblock%} в шаблоне, создаваемом тегом шаблона, пропадает script (он не включен и не остается в этом шаблоне).
Примечание. Теги шаблона render_block
и addtoblock
взяты из пакета django-sekizai.
Ответы
Ответ 1
{% 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 %}
Надеюсь, что это поможет тебе.
Ответ 2
{% 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