Тег django sekizai {% addtoblock%} работает неправильно - PullRequest
13 голосов
/ 21 марта 2012

Я пытаюсь реализовать приложение 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 .

Ответы [ 2 ]

27 голосов
/ 21 марта 2012

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

Надеюсь, это поможет вам.

5 голосов
/ 04 декабря 2015

{% 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...