我以为我弄明白了,但发现了一些奇怪的东西。
我在网址中
url('^page_1/$', handle_page_1),
url('^page_2/$', handle_page_2),
url('^.*/$', handle_page_not_found),
如果无法识别网址, handle_page_not_found()
会相应地重定向用户。
这很好,但我发现了一些奇怪的东西。
如果函数返回
return HttpResponse("ok")
然后返回“确定”,一切似乎都正常。但是,我刚刚看到handle_page_not_found()
也被调用(我用print语句测试过)。它仍然是“ok”返回,但它首先在handle_page_not_found()
中执行代码。
那么,我怎么能有一个为无法识别的URL调用的函数,但是HttpResponse
对象不会调用它?
答案 0 :(得分:3)
避免这件事,它适用于我。
urls.py:
urlpatterns = patterns('',
url('^page_1/$', handle_page_1),
url('^page_2/$', handle_page_2),
)
handler404='views.handle_page_not_found_404'
views.py:
def handle_page_not_found_404(request):
page_title='Page Not Found'
return render_to_response('404.html',locals(),context_instance=RequestContext(request))
答案 1 :(得分:1)
class Redirect404Middleware(object):
def process_response(self, request, response):
if response == Http404:
return HttpResponsePermanentRedirect('/')
return response
答案 2 :(得分:0)
最可能的原因是您的浏览器正在向您的网站发出多个请求。
特别是,它可能会尝试请求/favicon.ico/
。
您可以通过在调用处理程序时显示request.path
来确定。
答案 3 :(得分:0)
它适用于我的应用程序与Django v1.11.3和python v3.6。
步骤1.在views.py中添加view_404,如下所示。
def view_404(request):
# do something
return redirect('/')
步骤2.在urls.py上添加处理程序。
url(r'^.*/$', views.view_404)