2011-03-28 7 views
7

He creado un inclusion template tag personalizado que acepta un solo objeto de modelo Update.Acceda a STATIC_URL desde dentro de una etiqueta de plantilla de inclusión personalizada

etiqueta de plantilla:

@register.inclusion_tag('update_line.html') 
def update_line(update): 
    return {'update': update} 

update_line.html:

<tr><td class="update">{{ update }}</td><td class="ack"> 
<img id="update-{{ update.pk }}" class="ack-img" src="{{ STATIC_URL }}img/acknowledge.png" alt="Acknowledge" /></td></tr> 

El problema es que {{ STATIC_URL }} no está disponible en mi plantilla etiqueta de plantilla inclusión, a pesar de que estoy usando el django.core.context_processors.static procesador de contexto por lo que {{ STATIC_URL }} está disponible para todas mis plantillas "normales" que no están siendo procesadas a través de i etiqueta de plantilla de exclusión.

¿Hay alguna manera de obtener el STATIC_URL dentro de mi plantilla de etiqueta de plantilla de inclusión sin hacer algo desagradable como obtenerlo manualmente de la configuración y pasarlo explícitamente como una variable de contexto?

Respuesta

14

Bien. Sólo cuenta de esto después de publicar la pregunta:

En lugar de utilizar {{ STATIC_URL }} en mi plantilla de inclusión, utilizo la etiqueta de las etiquetas get_static_prefixstatic plantilla:

update_line.html:

{% load static %} 

<tr><td class="update">{{ update }}</td><td class="ack"> 
<img id="update-{{ update.pk }}" class="ack-img" src="{% get_static_prefix %}img/acknowledge.png" alt="Acknowledge" /></td></tr> 

actualización

Creo que la manera correcta de hacer esto ahora (Django 1.5 +) es:

update_line.html:

{% load staticfiles %} 

<tr><td class="update">{{ update }}</td><td class="ack"> 
<img id="update-{{ update.pk }}" class="ack-img" src="{% static 'my_app/img/acknowledge.png' %}" alt="Acknowledge" /></td></tr> 
+0

Supongo que esto se debe a que los procesadores de contexto no se aplican a las plantillas presentadas manualmente (o representadas mediante etiquetas de plantilla de inclusión). Hoy aprendí. – dgel

+1

Con Django 1.7, también funciona usando '{% load static%}' – spg

2

Dentro de su código de etiqueta de plantilla, puede hacer lo que quiera: por lo que puede importar fácilmente STATIC_URL desde settings usted mismo.

+1

Sí, sabía que era una opción, pero me preguntaba si había una mejor manera de hacerlo (no es que sea una mala manera). Decidí usar la etiqueta de plantilla 'get_static_prefix' de' static' en su lugar. De alguna manera se siente más django-esque. – dgel

Cuestiones relacionadas