转到另一个视图

时间:2013-01-15 00:23:24

标签: python django

说我有以下观点:

def show(request):
    protect(request)

    ... some more code here...

    return render_to_response
    ...

“protect”是另一个我正在导入的应用视图:来自watch.actions import protect

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

我该怎么做?

感谢。

1 个答案:

答案 0 :(得分: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(...)