在自定义模板标记内继承上下文变量

时间:2013-02-14 10:54:57

标签: python django django-templates

我有一个带有上下文变量myVar的django模板,在视图函数中设置。 此模板还会呈现呈现{% myTemplateTag %}

的自定义简单模板标记myTemplate.html

我想在呈现myVar的自定义模板标记中使用myTemplate.html

有没有办法在自定义模板标记中继承我的视图函数的上下文变量? (没有明确地将它作为参数传递给模板标签)?

2 个答案:

答案 0 :(得分:2)

使用simple_tag

使用simple_tag,只需设置takes_context=True

@register.simple_tag(takes_context=True)
def current_time(context, format_string):
    timezone = context['timezone']
    return your_get_current_time_method(timezone, format_string)

使用自定义模板标记

只需使用template.Variable.resolve(),即

foo = template.Variable('some_var').resolve(context)

请参阅passing variables to the templatetag

  

要使用Variable类,只需使用其名称对其进行实例化   要解析的变量,然后调用variable.resolve(context)。所以,   例如:

class FormatTimeNode(template.Node):
    def __init__(self, date_to_be_formatted, format_string):
        self.date_to_be_formatted = template.Variable(date_to_be_formatted)
        self.format_string = format_string

    def render(self, context):
        try:
            actual_date = self.date_to_be_formatted.resolve(context)
            return actual_date.strftime(self.format_string)
        except template.VariableDoesNotExist:
            return ''
     

如果无法解析传递的字符串,则变量解析将抛出VariableDoesNotExist异常   在页面的当前上下文中。

也可能有用:setting a variable in the context

答案 1 :(得分:0)

也许您可以include myTemplate.html文件而不是使用特殊标记呈现它?你看过include标签了吗?如果您include myTemplate.html,它将与包含该内容的内容共享上下文。