找不到页面 - 如何查找当前路径在Django URL中有效?

时间:2017-07-01 13:26:05

标签: django url django-urls

请注意我经历了所有答案,我没有找到解决方案,

我收到此错误,我知道当前网址asdf未在urls.py中显示我的问题我想检查我当前的路径是否在网址中?

我尝试了path == reverse('some_view'),但我需要现有的特定视图进行测试。但除了现在的路径,我什么都没有。

这是未找到的错误,

  

找不到页面(404)   请求方法:GET   请求网址:http://127.0.0.1:8002/asdf/

这里我想重新定位如果urls.py中不存在URL怎么做?

3 个答案:

答案 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