2012-03-21 2 views
13

django sekizai 앱을 구현하려고합니다. 내가 추가하고있는 js 파일을 복제하고 있습니다.django sekizai {% addtoblock %} 태그가 제대로 작동하지 않습니다.

기본 템플릿 : 나는 년후 사업부 내에서 같은 스크립트를 추가하려고 할 때 이제 여기에 렌더링 템플릿 twice.But 렌더링했다

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

이 기지를 사용

{% load sekizai_tags %} 
... 
{% render_block "my_js" %} 

템플릿 중복되지 않았습니다. 누군가가 이것에 관해 밝혀 줄 수 있다면 고맙겠습니다!

또한 템플릿 태그로 렌더링 된 템플릿에서 {% addtoblock %}을 (를) 사용하려고 시도하면 스크립트가 누락됩니다 (템플릿에 포함되지도 않고 템플릿에도 그대로 유지됩니다).

참고 : 템플릿 태그 render_blockaddtoblockdjango-sekizai 패키지의 템플릿 태그입니다.

+0

잘 난 내 스크립트의 중복 뒤에 이유를 찾을 수 div 내부와 외부 스크립트의 들여 쓰기 {% addtoblock %} 태그는 분명히 공백을 제거하지 않습니다. 그래서 내 첫 번째 질문에 대한 해결책은 다음과 바보 같은 일입니다 {% 부하 sekizai_tags %}

{% addtoblock "my_js" %}{% endaddtoblock %}
{%의 addtoblock "my_js"%} <스크립트 유형 = "텍스트/자바 스크립트"SRC = "{{MEDIA_URL}} js/my_js.js "> {% endaddtoblock %} –

+0

맞춤 템플릿 태그의 템플릿에서도 스크립트가 사라졌습니다. [django-sekizai-docs] (https://github.com/ojii/django-sekizai/blob/master/docs/restrictions.rst)에 따라 SekizaiContext 또는 RequestContext와 Sekizai 컨텍스트 프로세서 중 하나를 사용해야하지만 이 cont [ 'SEKIZAI_CONTENT_HOLDER'] = context [ 'SEKIZAI_CONTENT_HOLDER']을 사용하여 템플릿의 컨텍스트 크기를 줄이려면 (cont = {}와 같은) 해결 방법을 찾았습니다. 이 해결 방법을 사용하면 RequestContext를 사용할 필요가 없으며 sekezai 컨텍스트 프로세서로 충분합니다. –

답변

26

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

희망을 알려줍니다.

포함 태그에서 템플릿 내부
+0

작동하지 않습니다. sekizai는 "

3

{%의 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 
+0

매우 유용합니다 - 어디에서 문서화되어 있습니까? – petr

+0

1.10에서 작동합니다. 감사합니다. 이것은 실제로 문서로 이동해야합니다 .. –

관련 문제