Django强制重定向到主页

时间:2017-10-23 10:23:25

标签: javascript django redirect

这是最容易用一个例子来解释的。我有一个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'),
]

以下是应该重定向回家的views-method:

@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/的末尾?

感谢您的时间!

3 个答案:

答案 0 :(得分:1)

执行以下操作:

from django.http import HttpResponseRedirect

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

答案 1 :(得分:1)

您应该将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()

答案 2 :(得分:1)

试试这个:

from django.shortcuts import redirect

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