2010-10-14 143 views
9

目前动态选择模板Django的包含标签

我有一个编码像这样一个包含标签:

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

在我的模板,我包括它的投入{% my_insert %}

新功能要求

现在我们要测试一个新的布局 - 这只是对模板的更改,不更改上下文变量。我通过调用第一

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

要使用新的模板实现这一点,我必须使用:

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

问题

有没有一种方法来选择模板在设置模板标签上下文的函数中?

想象它可能是这样的:

@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 

回答

1

您需要创建自己的自定义标签,使用参数,这将是你的模板。无法使用包含多个模板的包含标签。

0

试试这个:

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

,并看看django documentation

+0

当我试图这样没有工作。我没有看到任何迹象表明它应该在你链接的文档中。 – mqsoh 2013-12-05 18:40:03

+1

这适用于我。 Django 1.9 – Sharmila 2016-07-24 02:05:17

3

我必须管理上述同样的问题,我解决这样的:

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"