用于修改请求路径的视图的自定义函数装饰器

时间:2010-07-11 17:59:21

标签: python django django-views decorator

有人可以告诉我如何为我的观点编写一个像@redirect_to_home这样的登录装饰器,这样它就可以将request.PATH变量修改为新的值/,只要它应用于一个观点。

我看到人们对装饰师做了很复杂的事情:我还没有彻底搞清楚。

谢谢

2 个答案:

答案 0 :(得分:3)

最好的方法是从django项目(auth模块)了解登录装饰器: http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/decorators.py#L33

如果查看“user_passes_test”函数,您将看到如何访问请求对象。

关于装饰器的好教程:http://www.ibm.com/developerworks/linux/library/l-cpdecor.html 有关有用装饰器的一些示例,请参阅:http://wiki.python.org/moin/PythonDecoratorLibrary

答案 1 :(得分:1)

感谢Piotr的有用例子。

def fake_requested_from_root(fn):
    """
    Login decorator which when used on a view modifies the reqquest.path
    to fool the template into thibking that the request is coming from the
    root page
    """
    def decorator(request, **kwargs):
        request.path = reverse('home')
        return fn(request, **kwargs)
    return decorator