Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-如果没有匹配的url,则重定向到主页_Python_Django_Django Urls_Urlconf - Fatal编程技术网

Python Django-如果没有匹配的url,则重定向到主页

Python Django-如果没有匹配的url,则重定向到主页,python,django,django-urls,urlconf,Python,Django,Django Urls,Urlconf,基本上,我的目标是将用户重定向到呈现index.html的视图,如果URLConf中没有与请求的url匹配的内容。然后,在客户端,我将根据需要管理路由或显示404页面 所以基本上,问题是 如何在Django中实现这种重定向?我试过这个: url(r'^(.*)$', views.index), …其他一些URL …毫不奇怪,(.*)意味着所有URL都被重定向到index.html,不管它是否与任何其他URL匹配。所以我应该把它放在url列表的最后吗?我觉得我应该使用某种中间件,或者Django

基本上,我的目标是将用户重定向到呈现
index.html
的视图,如果URLConf中没有与请求的url匹配的内容。然后,在客户端,我将根据需要管理路由或显示404页面

所以基本上,问题是

  • 如何在Django中实现这种重定向?我试过这个:

    url(r'^(.*)$', views.index),
    
    …其他一些URL

  • …毫不奇怪,
    (.*)
    意味着所有URL都被重定向到index.html,不管它是否与任何其他URL匹配。所以我应该把它放在url列表的最后吗?我觉得我应该使用某种中间件,或者Django有一种本地的方法来解决这个问题

  • 对我的rest应用程序的用户来说,这是一个不可忽视的副作用。每一次他们都会得到一个无效的URL,他们会得到HTML(实际上是home.HTML的HTML),而不是json或404错误。嗯,index.html代码并没有什么难看的地方,但这听起来是个坏主意。那么,我是否要分离这个逻辑,以便REST应用程序的用户得到404错误,而不是重定向到index.html?这主要是关于编码模式,而不是Django本身。不过,我也非常感谢您对此发表任何评论:)

  • 您可以在URL配置的末尾添加catch all,但它会导致一些意外行为(例如,从
    /my page
    重定向到
    /my page/
    (追加斜杠)不再有效)

    一个更好的方法是编写一个自定义的。您可以从中寻找灵感,因为它处理重定向

    如果不想重定向API请求,可以向中间件添加检查。例如,如果URL以
    /api/
    开头,或者请求具有
    Accept:application/json
    头,则无法重定向请求


    另一个选项是使用呈现索引页的。同样,在处理程序中,您有
    请求
    对象,因此您可以以不同的方式处理API请求。

    如果我们使用
    handler404
    重定向,请查看将来在此登录的用户,它可能会停止重定向i18n URL。请您确认检查这是否是api调用的适当方法是
    request.content\u type=='application/json
    ,这实际上取决于您的api。GET请求没有正文,因此它们没有内容类型头。您可能还需要考虑API客户端是否在实践中发送正确的头文件。