2010-10-14 9 views
9

ActualmenteElección dinámica de la plantilla de etiqueta de inclusión Django

tengo una etiqueta de inclusión que se codifica algo como esto:

@register.inclusion_tag('forms/my_insert.html', takes_context=True) 
def my_insert(context): 
    # set up some other variables for the context 
    return context 

En mi plantilla, lo incluyo poniendo en {% my_insert %}

Nueva solicitud de funciones

Ahora queremos probar un nuevo diseño: es solo un cambio en la plantilla, sin cambios en las variables de contexto. Estoy lograr esto mediante una llamada al primer

@register.inclusion_tag('forms/my_new_insert.html', takes_context=True) 
def my_new_insert(context): 
    return my_insert(context) 

Para utilizar la nueva plantilla, tengo que usar:

{% ifequal some_var 0 %} 
    {% my_insert %} 
{% endifequal %} 
{% ifnotequal some_var 0 %} 
    {% my_new_insert %} 
{% endifnotequal %} 

La pregunta

¿Hay una manera de elegir la plantilla en la función que configura el contexto de la etiqueta de la plantilla?

Me imagino podría ser algo como:

@register.inclusion_tag('forms/my_insert.html', takes_context=True) 
def my_insert(context): 
    # set up some other variables for the context 
    if context['some_var'] == 0: 
     context['template'] = 'forms/my_insert.html' 
    else: 
     context['template'] = 'forms/my_new_insert.html' 
    return context 

Respuesta

1

Es necesario crear su propia etiqueta personalizada, con el parámetro que será su plantilla. Donde no hay forma de usar la etiqueta de inclusión con varias plantillas.

0

Prueba esto:

@register.inclusion_tag('include/dummy.html') 
def my_new_insert(template='forms/my_insert.html'): 
    return {'template': template, 
      'myvar': Myobject.objects.all()} 

y echar un vistazo a django documentation

+0

Esto no funcionó cuando lo probé. No veo ninguna indicación de que deba aparecer en la documentación a la que se vinculó. – mqsoh

+1

Esto funciona para mí. Django 1.9 – Sharmila

3

que tenía que manejar misma edición arriba y resolví así:

dummy.html

{% extends template %} 

mytags.py

from django.template import Library 

register = Library() 

@register.inclusion_tag('dummy.html') 
def render_sample(template='default.html'): 
    return {'template': template} 

layout.html

{% load mytags %} 

{% render_sample template="another_template.html" 
Cuestiones relacionadas