2010-10-14 13 views
9

AttualmenteScelta dinamica di modello per tag inclusione Django

Ho un tag di inclusione che è codificato o meno così:

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

Nel mio modello, ho includerlo mettendo in {% my_insert %}

Nuova richiesta di funzionalità

Ora vogliamo testare un nuovo layout: è solo una modifica al modello, nessuna modifica alle variabili di contesto. Sto realizzare questo chiamando il primo

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

Per utilizzare il nuovo modello, devo usare:

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

La questione

C'è un modo per scegliere il modello nella funzione che imposta il contesto del tag del template?

mi immagino potrebbe essere qualcosa di simile:

@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 

risposta

1

È necessario creare il proprio tag personalizzato, con il parametro che sarà il vostro modello. Dove non è possibile utilizzare il tag di inclusione con diversi modelli.

0

Prova questo:

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

e dare un'occhiata a django documentation

+0

Questo non ha funzionato quando l'ho provato. Non vedo alcuna indicazione che dovrebbe essere nella documentazione a cui ti sei collegato. – mqsoh

+1

Questo funziona per me. Django 1.9 – Sharmila

3

ho dovuto gestire stesso problema di cui sopra e ho risolto in questo modo:

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" 
Problemi correlati