Django 包含模板标签多个模板选择
Django include template tag multiple template choices
我有一个要求,我必须在模板标签中包含一个模板。但是我想要包含的模板不是固定的。我有模板列表,需要包括首先找到的模板。
然而,包含模板标签只需要一个模板名称。
有没有办法修改此行为或任何其他方式来实现此目的。
我正在使用自定义模板标签,但自从更新到 django 1.9 后我收到警告
RemovedInDjango110Warning: render() must be called with a dict, not a RequestContext.
return t.render(context)
这是我的自定义模板标签
@register.simple_tag(takes_context=True)
def custom_include(context, *template_choices):
template_choices = (context['optionalTemplate'],) + template_choices
t = template.loader.select_template(template_choices)
return t.render(context)
我尝试从上下文中获取字典,它似乎有效(至少我是这么认为的)。但是一些上下文数据丢失了。例如,我的 google 分析命中率变为零,诸如此类。
request = context['request']
mydict = context.dicts[0]
return t.render(mydict, request)
任何人都可以建议如何实现这一目标。
您需要将上下文扁平化为单个字典。这将合并来自所有内部字典的数据:
mydict = context.flatten()
return t.render(mydict, context.request)
同时勾选 the docs。
我有一个要求,我必须在模板标签中包含一个模板。但是我想要包含的模板不是固定的。我有模板列表,需要包括首先找到的模板。
然而,包含模板标签只需要一个模板名称。 有没有办法修改此行为或任何其他方式来实现此目的。
我正在使用自定义模板标签,但自从更新到 django 1.9 后我收到警告
RemovedInDjango110Warning: render() must be called with a dict, not a RequestContext.
return t.render(context)
这是我的自定义模板标签
@register.simple_tag(takes_context=True)
def custom_include(context, *template_choices):
template_choices = (context['optionalTemplate'],) + template_choices
t = template.loader.select_template(template_choices)
return t.render(context)
我尝试从上下文中获取字典,它似乎有效(至少我是这么认为的)。但是一些上下文数据丢失了。例如,我的 google 分析命中率变为零,诸如此类。
request = context['request']
mydict = context.dicts[0]
return t.render(mydict, request)
任何人都可以建议如何实现这一目标。
您需要将上下文扁平化为单个字典。这将合并来自所有内部字典的数据:
mydict = context.flatten()
return t.render(mydict, context.request)
同时勾选 the docs。