通过模板执行视图后,Django视图无法正确呈现

时间:2019-11-12 23:07:22

标签: django

我有这个模板: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,执行视图,但是返回初始页面。

1 个答案:

答案 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。