5

我以为我已经弄清楚了,但发现了一些奇怪的东西。

在我的网址中

url('^page_1/$', handle_page_1),
url('^page_2/$', handle_page_2), 
url('^.*/$', handle_page_not_found),

handle_page_not_found()如果无法识别 url,则适当地重定向用户。

这很好用,但我发现了一些奇怪的东西。

如果函数返回

return HttpResponse("ok")

然后返回“ok”,一切似乎都正常。但是,我刚刚看到它handle_page_not_found()也被称为(我用打印语句进行了测试)。返回的仍然是“ok”,但它首先在handle_page_not_found().

那么,我怎样才能拥有一个为无法识别的 url 调用但未被HttpResponse对象调用的函数?

编辑:根据答案,看到我的代码实际上很好,除非在特殊测试情况下。只要将 HttpResponse 返回到 ajax 调用(这是我通常使用它的时候),这一切都很好。

4

4 回答 4

3

避免这件事,它对我有用。

网址.py:

 urlpatterns = patterns('',
 url('^page_1/$', handle_page_1),
 url('^page_2/$', handle_page_2),
 )
 handler404='views.handle_page_not_found_404'

视图.py:

def handle_page_not_found_404(request):

page_title='Page Not Found'
return render_to_response('404.html',locals(),context_instance=RequestContext(request))

有关更多详细信息,请参阅:Django 文档:customizing-error-views

于 2013-08-06T08:09:37.700 回答
1
 class Redirect404Middleware(object):
     def process_response(self, request, response):
         if response == Http404:
             return HttpResponsePermanentRedirect('/')

         return response
于 2015-02-27T11:06:19.763 回答
0

最可能的原因是您的浏览器正在向您的网站发出多个请求。

特别是,它可能正在尝试请求/favicon.ico/.

您可以通过显示request.path何时调用您的处理程序来确定。

于 2013-08-06T07:01:03.670 回答
0

它适用于我的带有 Django v1.11.3 和 python v3.6 的应用程序。

步骤 1. 在 vi​​ews.py 中添加 view_404,如下所示。

def view_404(request):
    # do something
    return redirect('/')

步骤 2. 在 urls.py 上添加处理程序。

url(r'^.*/$', views.view_404)
于 2017-12-07T02:03:07.413 回答