2012-03-21 14 views
13

Estoy tratando de implementar la aplicación django sekizai. Está duplicando los archivos js que estoy agregando.django sekizai {% addtoblock%} etiqueta no funciona correctamente

plantilla base:

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

que está utilizando esta 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 %} 

Ahora aquí la plantilla prestado ha rendido twice.But cuando traté de añadir el mismo guión dentro del div que no era 't duplicado. Apreciaría si alguien puede arrojar algo de luz sobre esto!

Además, cuando trato de usar {% addtoblock%} en una plantilla presentada por una etiqueta de plantilla, la secuencia de comandos se pierde (no se incluye ni se queda en esa plantilla).

Nota: Las etiquetas de plantilla, render_block y addtoblock, son del paquete django-sekizai.

+0

así que pude encontrar la razón detrás de la duplicación de mi guión que es la diferencia en el indentación de la secuencia de comandos dentro y fuera de la div. La etiqueta {% addtoblock%} aparentemente no elimina los espacios en blanco. Así que la solución a mi primera pregunta es una pregunta tonta de la siguiente manera: {% de carga sekizai_tags%}

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

+0

También en la plantilla de la etiqueta de plantilla personalizada los guiones estaban desapareciendo. Según [django-sekizai-docs] (https://github.com/ojii/django-sekizai/blob/master/docs/restrictions.rst), es obligatorio utilizar SekizaiContext o RequestContext y el procesador de contexto de sekizai, pero encontró una solución alternativa si desea dimensionar el contexto de su plantilla (por ejemplo, cont = {}) use este cont ['SEKIZAI_CONTENT_HOLDER'] = contexto ['SEKIZAI_CONTENT_HOLDER']. Con esta solución, no necesita usar RequestContext y solo el procesador de contexto sekezai sería suficiente. –

Respuesta

26

{% addtoblock %} y {% endaddtoblock %} tienen que estar dentro de un bloque en plantillas que heredan otra plantilla.

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

Espero que te ayude.

+0

No funcionará. el sekizai lo analizará como "\ n (8 espacios)

3

{%}% addtoblock dentro de la plantilla (something.html) de una etiqueta inclusión:

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

Muy útil: ¿está documentado en alguna parte? – petr

+0

Funciona en 1.10 para mí, gracias! Esto debería incluirse en los documentos ... –

Cuestiones relacionadas