2012-03-21 15 views
13

Sto provando ad implementare l'applicazione django sekizai. Sta duplicando i file js che sto aggiungendo.tag django sekizai {% addtoblock%} non funziona correttamente

modello di base:

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

modello che utilizza questa 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 %} 

Ora qui il template reso ha reso twice.But quando ho provato ad aggiungere lo stesso script all'interno del div wasn 'duplicato. Apprezzeremmo se qualcuno potesse far luce su questo!

Anche quando provo a utilizzare {% addtoblock%} in un modello reso da un tag modello, lo script scompare (non è incluso né rimane in tale modello).

Nota: I tag di template, render_block e addtoblock, sono dal pacchetto django-sekizai.

+0

così sono riuscito a trovare il motivo dietro la duplicazione del mio script, che è la differenza rientro del copione all'interno e all'esterno del div. Il tag {% addtoblock%} a quanto pare non rimuove gli spazi bianchi. Quindi la soluzione alla mia prima domanda è uno stupido uno come di seguito: {% del carico sekizai_tags%}

{% addtoblock "my_js" %}{% endaddtoblock %}
{% addtoblock "my_js" %} {% endaddtoblock%} –

+0

Anche nel modello di tag del modello personalizzato gli script stavano scomparendo. Come per [django-sekizai-docs] (https://github.com/ojii/django-sekizai/blob/master/docs/restrictions.rst) è obbligatorio utilizzare SekizaiContext o RequestContext e il processore di contesto sekizai ma io trovato una soluzione alternativa se si desidera ridimensionare il contesto del modello (ad esempio cont = {}) utilizzare questo cont ['SEKIZAI_CONTENT_HOLDER'] = contesto ['SEKIZAI_CONTENT_HOLDER']. Con questa soluzione alternativa non è necessario utilizzare RequestContext e solo il processore di contesto di sekezai sarebbe sufficiente. –

risposta

26

{% addtoblock %} e {% endaddtoblock %} devono trovarsi all'interno di un blocco in modelli che ereditano un altro modello.

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

La speranza che ti aiuta.

+0

Non funzionerà. il sekizai lo analizzerà come "\ n (8 spazi)

3

{% addtoblock%} all'interno del template (something.html) da un tag inclusione:

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

Molto utile - è documentato ovunque? – petr

+0

Funziona su 1.10 per me, grazie! Questo dovrebbe davvero andare nei documenti .. –

Problemi correlati