问题
I'm trying to implement django sekizai app. It is duplicating the js files that i'm adding.
base template:
{% load sekizai_tags %}
...
{% render_block "my_js" %}
template that is using this base:
{% 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 %}
Now here the rendered template has rendered twice.But when I tried adding the same script within the div it wasn't duplicated. Would appreciate if someone can shed some light on this!
Also when i try to use {% addtoblock %} in a template rendered by a template tag the script goes missing (It is neither included nor it stays in that template).
Note: The template tags, render_block
and addtoblock
, are from the django-sekizai package.
回答1:
{% addtoblock %}
and {% endaddtoblock %}
have to be inside of a block in templates that inherit another template.
# 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 %}
Hope that helps you out.
回答2:
{% addtoblock %} inside the template (something.html) from an inclusion tag:
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
来源:https://stackoverflow.com/questions/9806466/django-sekizai-addtoblock-tag-is-not-working-properly