我想编写一个装饰器,它将为模板渲染上下文提供值,如下所示:

@deco(art=Nouveau)
def my_wall(request):
    # should have art == 'something' in the template
    return render_from_template('plain_white.html', {art:'something'}, context_instance=RequestContext(request))

@deco(art=Nouveau)
def my_wall(request):
    # should have art == Nouveau in the template
    return render_from_template('plain_white.html', {}, context_instance=RequestContext(request))


我最初实现它的尝试看起来像这样:

class deco(object):

    def __init__(self, art=None):
        self.art = art

    def __call__(self, f):
        @wraps(f)
        def wrapper(request, *args, **kwargs):
            if self.art:
                request.setdefault('art', self.art)

            return f(request, *args, **kwargs)


但是,这不起作用,因为请求不是真正的命令。

我该如何实施?

最佳答案

唯一的方法是装饰器本身负责渲染和返回模板。并且有一个完善的代码段可以做到这一点:render_to装饰器。想法是您的视图仅返回字典,而装饰器实际上将其呈现。您应该能够编辑该代码段,以便其处理默认情况。

10-07 19:00
查看更多