我有一个装饰者:
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函数中使用它会很高兴。那可能吗?如果是这样的话?
答案 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
是很有用的,因此它们会消耗额外的参数,而不是像这样的装饰器一起窒息。