我可以通过Django视图在Decorator中访问上下文对象吗

亚历山大·Zh。

我有多个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')

因此,大胆地讲,我想创建装饰器,该装饰器可与在返回时附加上下文的视图一起使用,而在没有返回器的视图中使用。现在我明白了AttributeError: 'HttpResponse' object has no attribute 'context'我究竟做错了什么?

Python 2.7.13和Django 1.7.11

阿拉斯代尔:

调用func(*args, **kwargs)装饰器后,您已经渲染了模板,现在更改模板已为时已晚。

您可以切换到TemplateResponse,以允许您在呈现模板之前修改上下文。使用响应的context_data属性访问上下文

from django.template.response import TemplateResponse

@my_decor
def view1(request):
    # some logic
    context = {'some_data': 'some_value'}
    return TemplateResponse(request, 'some_template.html', context)

在您的装饰器中,更改response.contextresponse.context_data

    if response.status_code == 200:  # n.b. this is only for 200 responses, not 2XX as you say in your comment
        new_data = foo()
        response.context_data['some_new_data'] = new_data

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Javascript HTML中的Django视图中访问上下文变量(列表)

来自分类Dev

我可以在Django模板上下文处理器中访问url kwargs吗?

来自分类Dev

可以访问上下文的Jinja扩展

来自分类Java

如何在Kotlin中访问上下文对象中的变量?

来自分类Dev

我无法在react.createContext()中访问上下文的功能

来自分类Dev

托管服务中的访问上下文

来自分类Dev

我正在尝试将多个模型合并到一个 Django 视图中;我如何访问上下文 **kwargs

来自分类Dev

Django:在 POST 和 GET 中访问上下文数据

来自分类Dev

在ExchangeFilterFunction内部访问上下文

来自分类Dev

从useEffect访问上下文

来自分类Dev

从中访问上下文

来自分类Dev

我可以将两个对象传递给createPage中的上下文吗?

来自分类Java

我可以在@Scheduled中添加上下文吗?

来自分类Dev

我可以在Snowflake中编辑会话上下文吗?

来自分类Java

通过在异步gridview中单击图像来防止访问上下文操作菜单时重新加载活动

来自分类Dev

如何通过工作单元访问上下文中的方法?

来自分类Dev

Xtext ScopeProvider:访问上下文对象会导致错误

来自分类Dev

如何在 Step Function Map 状态下访问上下文对象?

来自分类Dev

[Nuxt.JS]从插件js访问上下文中的$ auth对象

来自分类Dev

使 Django 中的其他方法(和视图)可以访问一种方法的上下文变量

来自分类Java

访问上下文中Dockerfile外

来自分类Java

如何访问上下文库[MVVM]

来自分类Dev

ReactJS:从基本组件访问上下文

来自分类Dev

没有http.Request的访问上下文

来自分类Dev

Flutter:如何从 Dismissible onDismissed 访问上下文

来自分类Dev

如何访问上下文消费者中的道具

来自分类Dev

如何在Gatsby的模板组件中访问上下文变量?

来自分类Dev

在Autofac中的lambda注册期间访问上下文信息?

来自分类Dev

如何在拦截器中访问上下文?

Related 相关文章

  1. 1

    在Javascript HTML中的Django视图中访问上下文变量(列表)

  2. 2

    我可以在Django模板上下文处理器中访问url kwargs吗?

  3. 3

    可以访问上下文的Jinja扩展

  4. 4

    如何在Kotlin中访问上下文对象中的变量?

  5. 5

    我无法在react.createContext()中访问上下文的功能

  6. 6

    托管服务中的访问上下文

  7. 7

    我正在尝试将多个模型合并到一个 Django 视图中;我如何访问上下文 **kwargs

  8. 8

    Django:在 POST 和 GET 中访问上下文数据

  9. 9

    在ExchangeFilterFunction内部访问上下文

  10. 10

    从useEffect访问上下文

  11. 11

    从中访问上下文

  12. 12

    我可以将两个对象传递给createPage中的上下文吗?

  13. 13

    我可以在@Scheduled中添加上下文吗?

  14. 14

    我可以在Snowflake中编辑会话上下文吗?

  15. 15

    通过在异步gridview中单击图像来防止访问上下文操作菜单时重新加载活动

  16. 16

    如何通过工作单元访问上下文中的方法?

  17. 17

    Xtext ScopeProvider:访问上下文对象会导致错误

  18. 18

    如何在 Step Function Map 状态下访问上下文对象?

  19. 19

    [Nuxt.JS]从插件js访问上下文中的$ auth对象

  20. 20

    使 Django 中的其他方法(和视图)可以访问一种方法的上下文变量

  21. 21

    访问上下文中Dockerfile外

  22. 22

    如何访问上下文库[MVVM]

  23. 23

    ReactJS:从基本组件访问上下文

  24. 24

    没有http.Request的访问上下文

  25. 25

    Flutter:如何从 Dismissible onDismissed 访问上下文

  26. 26

    如何访问上下文消费者中的道具

  27. 27

    如何在Gatsby的模板组件中访问上下文变量?

  28. 28

    在Autofac中的lambda注册期间访问上下文信息?

  29. 29

    如何在拦截器中访问上下文?

热门标签

归档