2010-10-14 1 views
9

ObecnieDynamiczny wybór szablonu django znacznik włączenia

mam tag integracji, który jest zakodowany tak:

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

w swoim szablonie, I umieścić go poprzez umieszczenie w {% my_insert %}

Nowe żądanie funkcji

Teraz chcemy przetestować nowy układ - to tylko zmiana w szablonie, bez zmian zmiennych kontekstowych. Ja zrealizować to poprzez wywołanie pierwszego

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

Aby użyć nowego szablonu, mam użyć:

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

Kwestii

Czy istnieje sposób, aby wybrać szablon w funkcji, która ustawia kontekst znacznika szablonu?

Wyobrażam może to być coś w rodzaju:

@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 

Odpowiedz

1

Musisz utworzyć swój własny tag z parametrem, który będzie Twój szablon. Gdzie nie ma sposobu na użycie tagu integracji z kilkoma szablonami.

0

Spróbuj tego:

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

i przyjrzeć django documentation

+0

ta nie działa, gdy próbowałem go. Nie widzę żadnego wskazania, że ​​powinno to wynikać z dokumentacji, z którą się łączyłeś. – mqsoh

+1

To działa dla mnie. Django 1.9 – Sharmila

3

miałem zarządzać sam problem powyżej postanowiłem tak:

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"