【问题标题】:Going to another view转到另一个视图
【发布时间】:2013-01-15 00:23:24
【问题描述】:

假设我有以下观点:

def show(request):
    protect(request)

    ... some more code here...

    return render_to_response
    ...

“保护”是我正在导入的另一个应用程序视图,如下所示:from watch.actions import protect

在保护中,我进行了一些检查,如果满足条件,我想从“保护”中直接使用 render_to_response 并防止返回显示。如果条件不满足,我想正常返回“s​​how”继续代码执行。

我该怎么做?

谢谢。

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果它的唯一目的是您所描述的,您应该考虑将protect 写为视图装饰器。 This answer 提供了一个示例。

    根据我编写的视图装饰器,您的 protect 装饰器可能类似于:

    from functools import wraps
    
    from django.utils.decorators import available_attrs
    
    def protect(func):
        @wraps(func, assigned=available_attrs(func))
        def inner(request, *args, **kwargs):
            if some_condition:
                return render_to_response('protected_template')
            return func(request, *args, **kwargs)
        return inner
    

    这将允许您像这样使用它:

    @protect
    def show(request):
       ...
       return render_to_response(...)
    

    【讨论】:

    • 感谢干净的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多