我有多个django视图,我想根据它们的响应和状态代码添加一些上下文。现在我有一个类似这样的代码:
def my_decor(func):
def wrapper(*args, **kwargs):
response = func(*args, **kwargs)
if response.status_code == 200: # It will be changed to manipulate 2XX reponses only
new_data = foo()
response.context['some_new_data'] = new_data
return response
return wrapper
@my_decor
def view1(request):
# some logic
context = {'some_data': 'some_value'}
return render(request, 'some_template.html', context)
@my_decor
def view2(request):
# more logic
return render(request, 'another_template.html')
所以,基本上,我想创建decorator,它可以用于在返回时附加上下文的视图,也可以用于不附加上下文的视图。
现在我得到了AttributeError: 'HttpResponse' object has no attribute 'context'
。
我做错了什么
Python 2.7.13和Django 1.7.11
在decorator中调用
func(*args, **kwargs)
之后,您已经呈现了模板,现在更改模板已经太晚了您可以切换到^{} ,这允许您在呈现模板之前修改上下文。使用响应的
context_data
属性访问上下文在装饰器中,将
response.context
更改为response.context_data
:相关问题 更多 >
编程相关推荐