【问题标题】:How can I set a value in the context in a Django view decorator?如何在 Django 视图装饰器的上下文中设置值?
【发布时间】:2011-02-03 20:10:25
【问题描述】:

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

@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)

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

我该如何实现?

【问题讨论】:

    标签: python django django-templates django-views


    【解决方案1】:

    这样做的唯一方法是装饰器本身负责渲染和返回模板。并且有一个相当成熟的 sn-p 可以做到这一点:render_to 装饰器。这个想法是您的视图只返回一个字典,而装饰器实际呈现它。您应该能够编辑该 sn-p 以便它处理默认情况。

    【讨论】:

      猜你喜欢
      • 2012-08-02
      • 2011-05-29
      • 2021-07-12
      • 1970-01-01
      • 2015-09-25
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多