【问题标题】:Django force redirect to home pageDjango 强制重定向到主页
【发布时间】:2018-04-03 20:47:24
【问题描述】:

这是最容易用一个例子来解释的。我有一个 HTML 按钮,单击它时应该更改数据库中的状态字段。更改状态字段后,用户应该被重定向回主页。

下面是调用 Javascript 函数的 HTML 按钮:

{% for group in groups %}
       <button id="approve-btn" onclick="approvePendingGroup({{ group.pk 
}})">Approve</button>
{% endfor %}

这里是 Javascript 函数:

function approvePendingGroup(id) {
    window.location.href = "/result/approve/" + id;
}

Javascript 函数调用以下 URL,该 URL 调用视图中的方法。

urlpatterns = [
    url(r'^result/approve/(?P<pk>\d+)/$', views.approve_group, name 
    ='approve_group'),
]

这是应该重定向回主页的视图方法:

@csrf_exempt
def approve_group(request, pk):
    group = Group.objects.get(pk=pk)
    group.status = Status.approved
    group.save()
    return reverse('home')

很遗憾,这不会导致http://127.0.0.1:8000/home 页面 它把我带到:http://127.0.0.1:8000/result/approve/1/home 页面。它只是将“home”附加到上一个 URL。

如何强制此方法直接重定向到主页,而不仅仅是将其附加到 http://127.0.0.1:8000/result/approve/1/ 的末尾?

感谢您的宝贵时间!

【问题讨论】:

    标签: javascript django redirect


    【解决方案1】:

    试试这个:

    from django.shortcuts import redirect
    
    @csrf_exempt
    def approve_group(request, pk):
        ...
        # your code
        ...
        return redirect("/home/")
    

    【讨论】:

    • 非常感谢!我已经尝试过了,但它做了同样的事情。我现在在另一个浏览器中再试一次:)
    • 请试一试,这在我身边工作得很好。我希望它也对你有用。
    • 谢谢!我现在试了一下,至少它给出了一个新的错误。 NoReverseMatch 说“home”不是有效的视图或函数模式名称。奇怪,因为项目有: url(r'^home/$', views.home, name='home')
    • 您确定您使用的是我建议的相同视图,因为这里我没有使用return reverse('home'),所以我认为不会发生此错误。请检查您的视图模块是否有主页视图。我检查了你的网址,它是正确的。
    • 谢谢!它确实有效!不幸的是,它只适用于 Microsoft Edge :) 至少它可以工作
    【解决方案2】:

    你应该把你的 JavaScript 函数改成这样:

    function approvePendingGroup(id) {
        $.ajax({
          url: "/result/approve/" + id,
          type: 'POST',
          success: function (){
              window.location.href = '/home/'
          },
          error: function(){
              alert('Something went wrong!');
          }
        });
    }
    

    在您看来,只需返回成功响应:

    from django.http import HttpResponse
    
    @csrf_exempt
    def approve_group(request, pk):
        group = Group.objects.get(pk=pk)
        group.status = Status.approved
        group.save()
        return HttpResponse()
    

    【讨论】:

    • 非常感谢!至少这使事情向前发展,并给了我一个新的问题。现在页面卡在:127.0.0.1:8000/result/approve/1,并且不会重定向到主页。至少它没有给出任何错误,所以这是一个进步:)
    • @user3257736 组状态是否更改为approved
    • 另外,这需要jquery。你能试试更新后的代码吗?
    • 是的,状态已经审核通过! :) 非常感谢你!我应该链接到 HTML 文件中的 jquery,作为
    • @user3257736 如果它改变了,这意味着你已经有jquery。检查你的控制台,看看它说了什么。
    【解决方案3】:

    执行以下操作:

    from django.http import HttpResponseRedirect
    
    @csrf_exempt
    def approve_group(request, pk):
        ...
        #return reverse('home')
        return HttpResponseRedirect('/home/')
    

    【讨论】:

    猜你喜欢
    • 2012-02-28
    • 2015-10-01
    • 1970-01-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2021-11-03
    • 2010-11-19
    相关资源
    最近更新 更多