gpt4 book ai didi

django - 如何从 Jinja2 扩展访问上下文

转载 作者:行者123 更新时间:2023-12-03 21:40:23 25 4
gpt4 key购买 nike

我有一个用于 Django 模板的节点:

class MetadataNode(template.Node):
def render(self, context):
...

其中注册一个标签:
def get_metadata(parser, token):
...
register = template.Library()
register.tag(get_metadata)

但是我使用的是 Jinja2 模板,因此我需要一个 Jinja2 扩展:
class get_metadata(Extension):
tags = {'get_metadata'}

def parse(self, parser):
while not parser.stream.current.type == 'block_end':
parser.stream.next()
return nodes.Output([self.call_method('_get_metadata')])

def _get_metadata(self):
return Markup(MetadataNode().render(<Django context???>))

register = CoffinLibrary()
register.tag(get_metadata)

如何在解析方法中访问 Django 上下文(特殊性 request.META.PATH_INFO)?
或者如何使用上下文运行渲染元数据节点?

最佳答案

您可以使用 contextfunction wrapper 。

from jinja2 import contextfunction

class get_metadata(Extension):
tags = {'get_metadata'}

def parse(self, parser):
while not parser.stream.current.type == 'block_end':
parser.stream.next()
return nodes.Output([self.call_method('_get_metadata')])

@contextfunction
def _get_metadata(self, context):
req = context.get("request")
if not req:
return None
return req["META"]["PATH_INFO"]

register = CoffinLibrary()
register.tag(get_metadata)

关于django - 如何从 Jinja2 扩展访问上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19116311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com