【问题标题】:Django Decorator View Not CallableDjango 装饰器视图不可调用
【发布时间】:2012-10-24 13:06:25
【问题描述】:

我为我的 django 应用编写了两个非常简单的装饰器:

def login_required_json(f):
    def inner(request, *args, **kwargs):
        #this check the session if userid key exist, if not it will redirect to login page
        if not request.user.is_authenticated():
            result=dict()
            result["success"]=False
            result["message"]="The user is not authenticated"
            return HttpResponse(content=simplejson.dumps(result),mimetype="application/json")
        else:
            return f(request, *args, **kwargs)

def catch_404_json(f):
    def inner(*args,**kwargs):
        try:
            return f(*args, **kwargs)
        except Http404:
            result=dict()
            result["success"]=False
            result["message"]="The some of the resources throw 404"
            return HttpResponse(content=simplejson.dumps(result),mimetype="application/json")

但是当我将它们应用于我的视图时,我在模板中收到“ViewDoesNotExist”错误,说它无法导入视图,因为它不可调用。我做错了什么?

【问题讨论】:

  • 请展示你是如何应用装饰器的。

标签: python django decorator


【解决方案1】:
def login_required_json(f):
    def inner(request, *args, **kwargs):
        #this check the session if userid key exist, if not it will redirect to login page
        if not request.user.is_authenticated():
            result=dict()
            result["success"]=False
            result["message"]="The user is not authenticated"
            return HttpResponse(content=simplejson.dumps(result),mimetype="application/json")
        else:
            return f(request, *args, **kwargs)

    return inner   # <--- Here

你的装饰器返回的是 None,而不是实际的视图。 所以返回我上面演示的内部函数。

【讨论】:

    猜你喜欢
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 2014-06-07
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    相关资源
    最近更新 更多