Django,让装饰器值在视图函数中可用

时间:2012-10-18 15:17:56

标签: django django-views decorator

我有一个装饰者:

def site_login_required(function=None):
    def _dec(view_func):
        def _view(request, *args, **kwargs):
            gets site_id. checks stuff. if else.

这是以正常方式调用的:

@site_login_required
def frontPage(request, url_arg):  

装饰者找到一个site_id。在frontPage函数中使用它会很高兴。那可能吗?如果是这样的话?

1 个答案:

答案 0 :(得分:2)

当您在装饰器中调用视图函数时,可以将其作为kwarg传递:

def site_login_required(function=None):
    def _dec(view_func):
        def _view(request, *args, **kwargs):
            site_id = get_site_id()
            url_arg = get_a_url()
            view_func(request, url_arg, site_id=site_id)

@site_login_required
def frontPage(request, url_arg, site_id=None, *args, **kwargs):
    ...

作为旁注,在所有视图函数中接受*args**kwargs是很有用的,因此它们会消耗额外的参数,而不是像这样的装饰器一起窒息。