我有观点:
@decorator
def func(request):
hello = "hello"
return render_to_responce("test.html", locals() )
和模板 test.html:
{{ hello }}
{{ username }}
我想写装饰器func(request)
,它将变量 USERNAME 添加到函数并在模板中返回两个参数。我尝试将其制作如下:
def decorator(func):
def wrapper( request, *args, **kwargs):
username = request.user.username
q = func(request, *args, **kwargs)
#what I need add here I do not know ...
return q
return wrapper
如果您的视图如下所示:
def func(request, username):
hello = "hello"
return render_to_responce("test.html", locals() )
你可以这样写一个装饰器:
from functools import wraps
def pass_username(view):
@wraps(view)
def wrapper(request, *args, **kwargs):
return view(request, request.user.username, *args, **kwargs)
return wrapper
然后像这样使用它:
@pass_username
def func(request, username):
hello = "hello"
return render_to_response("test.html", locals())
(只要确保你会在urls.py
就好像它是def func(request):
, 没有username
- 这个参数将由装饰器提供)
但事实上,这是非常简单的情况,并不真正需要单独的装饰器(无论如何,它只是视图定义中的额外一行)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)