kus*_*sha 1 python django decorator
我有看法:
@decorator
def func(request):
hello = "hello"
return render_to_responce("test.html", locals() )
Run Code Online (Sandbox Code Playgroud)
和模板test.html:
{{ hello }}
{{ username }}
Run Code Online (Sandbox Code Playgroud)
我想编写decorator for 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
Run Code Online (Sandbox Code Playgroud)
如果您的视图如下所示:
def func(request, username):
hello = "hello"
return render_to_responce("test.html", locals() )
Run Code Online (Sandbox Code Playgroud)
你可以这样写一个装饰器:
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
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
@pass_username
def func(request, username):
hello = "hello"
return render_to_response("test.html", locals())
Run Code Online (Sandbox Code Playgroud)
(只是确保你会像对待它urls.py一样对待它- def func(request):没有username- 这个参数将由装饰者提供)
但实际上这是非常简单的情况,并不需要单独的装饰器(无论如何,它只是视图定义中的一个额外的行).
| 归档时间: |
|
| 查看次数: |
2753 次 |
| 最近记录: |