Django 1.6 301 url 重定向不起作用

Posted

技术标签:

【中文标题】Django 1.6 301 url 重定向不起作用【英文标题】:Django 1.6 301 url redirect not working 【发布时间】:2015-03-23 22:10:44 【问题描述】:

我正在尝试使用 django 重定向应用程序进行 301 重定向,但当我访问旧网址时,我仍然不断收到 404 页面。我按照文档https://docs.djangoproject.com/en/1.6/ref/contrib/redirects/ 并在数据库中添加了一个新旧网址,但它仍然无法正常工作。

还有其他方法可以进行 301 重定向

我有这个网址 http://localhost:8000/doclistings/?speciality=Dentist,我希望它被重定向到 http://localhost:8000/doclistings/?speciality=Dentists

urls.py

url(r'^doclistings/$', views.doclistings, name='doclistings'),

views.py

def doclistings(request):
    d = getVariables(request)
    if request.method == "GET":
        form = DropdownSelectionForm(request.GET)
        try:
            s_name = request.GET['speciality']
        except:
            s_name = None
        try:
            l_name = request.GET['language']
        except:
            l_name = None
        try:
            g_name = request.GET['gender']
        except:
            g_name = None

        d['s_name'] = s_name # adding these to the forms for the "selected" option
        d['l_name'] = l_name
        d['g_name'] = g_name


        try:
            doctors = filter_doctors(request=request, specialization=s_name, gender=g_name, language=l_name).order_by('-netlikes')

        except Exception:
            return error404(request)

    else:
        form = DropdownSelectionForm()

    d['doctors'] = doctors
    d.update('form': form, 'languages': Language.objects.all())
    return render_to_response('m1/doclistings.html',d)

【问题讨论】:

嗨,您是否考虑过将两个 url 指向 urls.py 中的同一视图 我不知道该怎么做。我已经用视图和网址更新了问题 你确定你在 try except 表达式中的doctors = ... 是正确的吗?看来您的 404 错误来自这里.... 【参考方案1】:

您实际上不必进行重定向。如果我错了,请纠正我,但您想访问该专业的值,并且如果 Dentist 中的用户键您希望它是 Dentists

我认为确保正确填写 GET 请求的键和值的正确方法是通过表单验证。有很多方法可以进行表单验证,您可以使用 javascript 或 django 表单进行验证。

但是,快速解决您的问题,将一些逻辑传递到您的代码中,如果 speciality == 'doctor' 的值,您将其设置为 doctors

例如,

def doclistings(request):
    d = getVariables(request)
    if request.method == "GET":
        form = DropdownSelectionForm(request.GET)
        try:
            s_name = request.GET['speciality']
            if s_name == 'Dentist':
                s_name = 'Dentists'
        except:
            s_name = None
        try:
            l_name = request.GET['language']
        except:
            l_name = None
        try:
            g_name = request.GET['gender']
        except:
            g_name = None

        d['s_name'] = s_name # adding these to the forms for the "selected" option
        d['l_name'] = l_name
        d['g_name'] = g_name


        try:
            doctors = filter_doctors(request=request, specialization=s_name, gender=g_name, language=l_name).order_by('-netlikes')

        except Exception:
            return error404(request)

    else:
        form = DropdownSelectionForm()

    d['doctors'] = doctors
    d.update('form': form, 'languages': Language.objects.all())
    return render_to_response('m1/doclistings.html',d)

让我知道这是否适合你

干杯, 生物鸟人

【讨论】:

以上是关于Django 1.6 301 url 重定向不起作用的主要内容,如果未能解决你的问题,请参考以下文章

301 重定向不起作用 (WordPress) - [ URL 中 ?m=1 的问题]

为啥我的 .htaccess 301 重定向规则不起作用?

Yii2 301 从原始 url 重定向到 .htaccess 中对 SEO 友好的 url 不起作用,需要其他解决方案

在 Django 1.6 中使用另一个 url slug 从视图重定向到另一个 html 页面

301 重定向仅在刷新或新窗口上单击时不起作用

如果 URL 与 slug 不匹配,则规范链接和 301 重定向