我有看法:
@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
请您参考如下方法:
如果你的 View 是这样的:
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 -这个参数将由装饰器提供)
但这确实是一个非常简单的案例,并不需要单独的装饰器(无论如何,它只是 View 定义中的一个附加行)。
