【问题标题】:Django view not rendering correctly after view execution via template通过模板执行视图后,Django 视图无法正确呈现
【发布时间】:2019-11-12 23:07:22
【问题描述】:

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

【问题讨论】:

    标签: django


    【解决方案1】:

    在您的 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。

    【讨论】:

    • 我会尝试添加重定向,但我有一个问题,为什么要将按钮放在表单中?
    • 我收到此错误:AttributeError at /calculate_folder/1 'Folder' object has no attribute 'get_absolute_url'
    • 放入表单发送POST请求。当视图修改数据库时,你不应该使用 GET。
    • 您收到该错误是因为您尚未在模型类上定义 get_absolute_url() 。 docs.djangoproject.com/en/2.2/ref/models/instances/…
    • 现在它给了我这个:Exception Type: NoReverseMatch Exception Value: Reverse for 'views.details' not found. 'views.details' is not a valid view function or pattern name.
    猜你喜欢
    • 2017-04-06
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多