我有这个模板:folder.html。我上面有一个按钮,它调用了一个称为calculate_folder的视图。该视图进行了一些计算,然后呈现回folder.html。
问题在于,渲染时会进行视图计算,但浏览器中的链接仍然相同(localhost:8000 / calculate_folder / pk)。 以下是一些示例代码来说明问题:
@user_passes_test(lambda u: u.is_superuser)
def calculate_folder(request, pk):
folder = get_object_or_404(Folder, id=pk)
folder.status = 'P'
folder.save()
context = {
'folder': Folder.objects.get(id=pk)
}
return render(request, 'dashboard/folder.html', context)
这是urls.py的内容:
path('calculate_folder/<pk>', views.calculate_folder, name='calculate_folder'),
这是模板本身:
<div class="inner"><a href="/calculate_folder/{{folder.pk}}"><input type="submit" style="width: 10em;" class="profile-edit-btn btn-info mb-2" name="btnAddMore" value="Calculate"/></a></div>
我想单击按钮,转到url,执行视图,但是返回初始页面。
答案 0 :(得分:0)
在您的calculate_folder视图中返回重定向。
from django.shortcuts import redirect
def calculate_folder(request, pk):
# Your function
# instead of return render(request, 'dashboard/folder.html', context)
folder = Folder.objects.get(id=pk)
return redirect(folder.get_absolute_url())
redirect
将调用Folder的get_absolute_url()
方法see here for more details。
您应该将按钮放入带有csrf令牌的表单中,并将视图上的方法限制为POST。