我有一个带有上下文变量myVar
的django模板,在视图函数中设置。
此模板还会呈现呈现{% myTemplateTag %}
myTemplate.html
我想在呈现myVar
的自定义模板标记中使用myTemplate.html
。
有没有办法在自定义模板标记中继承我的视图函数的上下文变量? (没有明确地将它作为参数传递给模板标签)?
答案 0 :(得分:2)
使用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异常 在页面的当前上下文中。
答案 1 :(得分:0)
也许您可以include
myTemplate.html
文件而不是使用特殊标记呈现它?你看过include标签了吗?如果您include
myTemplate.html
,它将与包含该内容的内容共享上下文。