如何从Jinja的扩展名中访问上下文变量? [英] How to access context variables from the Jinja's Extension?

查看:66
本文介绍了如何从Jinja的扩展名中访问上下文变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在通过棺木使用django + jinja2,我无法理解如何访问扩展中的上下文变量。例如,我有:

  from coffin.shortcuts import render_to_response 

def some_view(request) :
return render_to_response('template.html',{'a':1})

class RenderFooExtension(Extension):
tags = set(['render_foo'])

def parse(self,parser):
lineno = parser.stream.next()。lineno

#一些解析过程

return nodes.Output([self.call_method('render'),])。set_lineno(lineno)

def render(self):
#TODO:我需要到这里,例如,`a`对象
return''

所以我需要得到$ render 方法中的c $ c> a 变量。如何做?

解决方案

好的,我自己的答案。



jinja2.nodes.Name('a','load')添加到 call_method code> Extension 这样,它将从上下文加载。

  class RenderFooExtension(Extension):
tags = set(['render_foo'])

def parse(self,parser):
lineno = parser.stream.next()。lineno

args = [nodes.Name('a','load'),]

return nodes.Output([self.call_method('render',args) ])set_lineno(lineno)

def render(self,a):
print'Gotcha!',a
return'something useful?'


I'm using django+jinja2 via coffin, and I can't understand how to access the context variables in the extension. For example, I have this:

from coffin.shortcuts import render_to_response

def some_view(request):
    return render_to_response('template.html', {'a': 1})

class RenderFooExtension(Extension):
    tags = set(['render_foo'])

    def parse(self, parser):
        lineno = parser.stream.next().lineno

        # Some parsing process

        return nodes.Output([self.call_method('render'),]).set_lineno(lineno)

    def render(self):
        # TODO: I need to get here, for example, `a` object
        return ''

So I need to get a variable in the render method. How can I do it?

解决方案

Ok, my own answer.

Add a jinja2.nodes.Name('a', 'load') into a call_method of the Extension like this, and it will be loaded from the context.

class RenderFooExtension(Extension):
    tags = set(['render_foo'])

    def parse(self, parser):
        lineno = parser.stream.next().lineno

        args = [nodes.Name('a', 'load'),]

        return nodes.Output([self.call_method('render', args),]).set_lineno(lineno)

    def render(self, a):
        print 'Gotcha!', a
        return 'something useful?'

这篇关于如何从Jinja的扩展名中访问上下文变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆