请注意我经历了所有答案,我没有找到解决方案,
我收到此错误,我知道当前网址asdf
未在urls.py中显示我的问题我想检查我当前的路径是否在网址中?
我尝试了path == reverse('some_view')
,但我需要现有的特定视图进行测试。但除了现在的路径,我什么都没有。
这是未找到的错误,
找不到页面(404) 请求方法:GET 请求网址:http://127.0.0.1:8002/asdf/
这里我想重新定位如果urls.py中不存在URL怎么做?
答案 0 :(得分:1)
您可以尝试解决测试网址,如果遇到404,可以重定向。
from django.core.urlresolvers import resolve, Resolver404
.....
try:
return bool(resolve(url))
except Resolver404:
return HttpResponseRedirect('some url')
答案 1 :(得分:1)
我认为中间件就是答案。 像这样:
from django.core.urlresolvers import resolve, Resolver404
class CheckURLExists(object):
def process_request(self, request):
try:
resolve(url)
except Resolver404:
return HttpResponseRedirect('some url')
然后在设置中添加中间件:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'middlewares.redirects.CheckURLExists,
]
中间件允许您拦截任何请求,并执行您想要的任何操作。
答案 2 :(得分:0)
在settings.py中激活您的中间件。
在middleware.py中:
from django.conf import settings
from django.shortcuts import redirect
class MyMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
if response.status_code == 404:
return redirect('someurl')
else:
return response
def process_view(self, request, view_func, view_args, view_kwargs):
pass