找不到页面 - 如何找到当前路径在 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