【问题标题】:Django wrong amount of arguments in custom handler自定义处理程序中的 Django 参数数量错误
【发布时间】:2020-03-03 12:48:15
【问题描述】:

我正在尝试为第 404 页制作自定义处理程序,但出现此错误。我已经尝试了很多方法,但我的观点似乎不起作用?

handler404 = 'DEMOPROJECT.views.handler404'
handler500 = 'DEMOPROJECT.views.handler500'

def handler404(request, exception, template_name="404.html"):
    response = render_to_response('/not-found')
    response.status_code = 404
    return render(request, response)

def handler500(request, exception, template_name="500.html"):
    response = render_to_response('/not-found')
    response.status_code = 500
    return render(request, response)
ERRORS:
?: (urls.E007) The custom handler500 view 'DEMOPROJECT.views.handler500' does not take the correct number of arguments (request).

System check identified 1 issue (0 silenced).

【问题讨论】:

    标签: python django


    【解决方案1】:

    根据他们使用的 Django 版本,视图可以相互接收。在official documentation中可以查阅缩减参数。

    对于 Django > 2.0,它看起来像这样:

    def handler404(request, exception, template_name="404.html"):
        response = render_to_response(template_name)
        response.status_code = 404
        return response
    
    def handler500(request, *args, **argv):
        return render(request, '500.html', status=500)
    

    如果您不打算修改视图的上下文,一个可能的更简单的解决方案是直接创建相应的模板。默认情况下,如果他们能找到这些模板,他们将分别使用它们:404.html500.html403.html400.html

    您必须将它们放在模板目录中,如下所示。

    mysite/
        mysite/
            __init__.py
            settings.py
            ...
        polls/
            urls.py
            view.py
            ...
        templates/
            404.html
            500.html
        manage.py
    

    另外,这个问题是duplicated

    【讨论】:

    • 直接创建模板并跳过自定义处理程序,确保您在 settings.py 中设置了TEMPLATE_DIRS
    • 什么意思?
    • 如果您的目标是在遇到 404、500 错误时显示 HTML 页面,您可以直接创建名称为 404.html500.html 的模板。 Django 将寻找具有该名称的模板。
    • 那么我上面写的代码就行了,否则,指定你使用哪个Django版本。
    • 我搞定了。我制作了一个名为 404 的 html 文件并使用了 Template.as_view 并不得不使用 python manage.py runserver --insecure 来查看它
    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2019-04-08
    • 2018-04-29
    • 2011-06-01
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多