【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 2019-07-23
        • 2012-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-26
        • 2020-10-02
        • 2020-11-24
        • 2019-01-22
        相关资源
        最近更新 更多