我想编写一个装饰器,它将为模板渲染上下文提供值,如下所示:
@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装饰器。想法是您的视图仅返回字典,而装饰器实际上将其呈现。您应该能够编辑该代码段,以便其处理默认情况。