我有一个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)
如何在parse方法中访问Django上下文(特殊性request.META.PATH_INFO)? 或者如何使用上下文运行渲染MetadataNode? p>
答案 0 :(得分:0)
您可以使用contextfunction包装器。
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)