这是最容易用一个例子来解释的。我有一个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/的末尾?
感谢您的时间!
答案 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/")