2012-03-21 13 views
13

मैं django sekizai ऐप को लागू करने की कोशिश कर रहा हूं। यह जेएस फाइलों को डुप्लिकेट कर रहा है जो मैं जोड़ रहा हूं।django sekizai {% addtoblock%} टैग ठीक से काम नहीं कर रहा है

आधार टेम्पलेट:

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

अब यहाँ प्रदान की गई टेम्पलेट twice.But प्रदान की गई है जब मैं div यह wasn के भीतर एक ही स्क्रिप्ट जोड़ने की कोशिश की: यह है कि इस आधार उपयोग कर रहा है

{% 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'] = संदर्भ ['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 इसे "\ n (8 रिक्त स्थान) <स्क्रिप्ट प्रकार =" टेक्स्ट/जावास्क्रिप्ट "के रूप में पार्स करेगा ... />" और नहीं "

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 पर काम करता है, धन्यवाद! यह वास्तव में दस्तावेज़ों में जाना चाहिए .. –

संबंधित मुद्दे