2012-03-21 30 views
13

私はdjango sekizai appを実装しようとしています。私が追加しているjsファイルを複製しています。django sekizai {%addtoblock%}タグが正しく動作していません

ベーステンプレート:私はそれがwasnのdiv内の同じスクリプトを追加しようとしたときに今ここにレンダリングされたテンプレートが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_blockおよびaddtoblockは、django-sekizaiパッケージからのものです。

+0

がよく、私は私のスクリプトの複製の背後にある理由を見出すことができますdiv内外のスクリプトの字下げ。 {%addtoblock%}タグは明らかに空白を削除しません。だから私の最初の質問を解決するには、以下のような愚かなものである: {%負荷sekizai_tags%}

{% addtoblock "my_js" %}{% endaddtoblock %}
{%のaddtoblock "my_js" %}ます。 {%endaddtoblock%} –

+0

カスタムテンプレートタグのテンプレートでもスクリプトが消えていました。 [django-sekizai-docs](https://github.com/ojii/django-sekizai/blob/master/docs/restrictions.rst)に従って、SekizaiContextまたはRequestContextとSekizaiコンテキストプロセッサのどちらかを使用することが義務付けられていますが、テンプレートのコンテキストのサイズを小さくしたい場合(cont = {})、このcont ['SEKIZAI_CONTENT_HOLDER'] = context ['SEKIZAI_CONTENT_HOLDER']を使用して回避策を見つけました。この回避策では、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で動作します、ありがとう!これは実際にドキュメントに入るはずです.. –

関連する問題