找不到页面 - 如何找到当前路径在 Django URL 中有效?
Page Not Found - how to find current path is valid in Django URL's?
请注意,我浏览了所有答案,但没有找到解决方案,
我收到这个错误,我知道当前 URL asdf
没有出现在 urls.py 我的问题我想检查我的当前路径是否在 url 中?
我试过 path == reverse('some_view')
但我需要现有的特定视图来测试。但我除了当前路径什么都没有。
这里是找不到的错误,
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8002/asdf/
如果 URL 不在 urls.py 中,我想重定向到这里怎么办?
你可以做的是尝试解决你的测试url,如果你遇到 404,你可以重定向它。
from django.core.urlresolvers import resolve, Resolver404
.....
try:
return bool(resolve(url))
except Resolver404:
return HttpResponseRedirect('some url')
我认为中间件就是答案。
像这样:
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,
]
一个中间件可以让你拦截任何请求,并为所欲为。
在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
请注意,我浏览了所有答案,但没有找到解决方案,
我收到这个错误,我知道当前 URL asdf
没有出现在 urls.py 我的问题我想检查我的当前路径是否在 url 中?
我试过 path == reverse('some_view')
但我需要现有的特定视图来测试。但我除了当前路径什么都没有。
这里是找不到的错误,
Page not found (404) Request Method: GET Request URL: http://127.0.0.1:8002/asdf/
如果 URL 不在 urls.py 中,我想重定向到这里怎么办?
你可以做的是尝试解决你的测试url,如果你遇到 404,你可以重定向它。
from django.core.urlresolvers import resolve, Resolver404
.....
try:
return bool(resolve(url))
except Resolver404:
return HttpResponseRedirect('some url')
我认为中间件就是答案。 像这样:
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,
]
一个中间件可以让你拦截任何请求,并为所欲为。
在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