【问题标题】:Page Not Found - how to find current path is valid in Django URL's?找不到页面 - 如何查找当前路径在 Django URL 中有效?
【发布时间】:2017-12-05 07:11:55
【问题描述】:
请注意,我浏览了所有答案,但没有找到解决方案,
我收到此错误,我知道当前 URL asdf 未在 urls.py 中显示我的问题我想检查我当前的路径是否在 urls 中?
我尝试了path == reverse('some_view'),但我需要现有的特定视图来测试。但除了当前路径,我什么都没有。
这是未找到的错误,
找不到页面 (404)
请求方法:GET
请求网址:http://127.0.0.1:8002/asdf/
如果 urls.py 中不存在 URL,我想在这里重定向,该怎么做?
【问题讨论】:
标签:
django
url
django-urls
【解决方案1】:
您可以做的是尝试解析您的测试网址,如果遇到 404,您可以重定向它。
from django.core.urlresolvers import resolve, Resolver404
.....
try:
return bool(resolve(url))
except Resolver404:
return HttpResponseRedirect('some url')
【解决方案2】:
我认为中间件就是答案。
像这样的:
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,
]
中间件允许您拦截任何请求,并为所欲为。
【解决方案3】:
在 settings.py 中激活你的中间件。
在中间件.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