首页 > 解决方案 > Django 视图/html 输入 - 当没有表单更新时,我可以使用提交强制更新吗?

问题描述

当没有表单更新出现时,是否可以使用表单本身的 html 表单强制刷新模板?这是一个我认为是有效用例的简单示例。

视图生成一个随机数:-

def test_random_view(request):
    varid=randint(1,1000)
    context={
        "Randomid": varid
    }
    return render(request ,'test_random.html', {'context': context})

一个简单的页面应该生成这个随机数:-

This doesn't work<br><br>
Here is a random number: <br>
{{ context.Randomid }}
<form method='get' action=''>
    <input type="text" name="input"  value="Here is an empty field"><br>
    <input type="submit" value="Update the random number"><br>
</form>

但是单击提交按钮时,随机数不会更新。我假设这是因为它识别出没有对表单进行更新,因此它不会传递回视图以生成新的随机数。您可以通过将随机数传递给文本输入来“欺骗”它:-

This sort of works<br><br>
Here is a random number: <br>
<form method='get' action=''>
    <input type="text" name="input"  value={{ context.Randomid }}><br>
    <input type="submit" value="Update the random number"><br>
</form>

但是除了强制表单识别更新并传回视图之外,没有其他理由存在此文本字段。

有什么更好的方法来做到这一点?

我应该在 forms.py 中创建表单,然后在视图中创建表单的实例吗?如果是这样,我如何确保页面会刷新?

可以在页面本身中适当地完成吗?

顺便说一句,此应用程序是让用户从列表中选择一个项目,随机位于选择的顶部,然后单击以进行实际选择,或者重复单击以获取他们想要的任意数量的随机建议。

谢谢你的帮助

菲尔

标签: htmldjangoformsviewform-submit

解决方案


通常 Django 不会缓存你的视图,任何GET请求都应该返回一个新的响应。出于某种原因,您似乎看到了缓存的响应。这可能是您的浏览器,或介于两者之间的某个服务器(nginx?)。

如果你想防止 Django HTTP 响应被缓存,最简单的方法是用装饰器装饰它never_cachehttps://docs.djangoproject.com/en/3.0/topics/http/decorators/#django。 views.decorators.cache.never_cache


推荐阅读