Django view/html 输入 - 当没有表单更新时,我可以使用提交强制更新吗?

Django view/html input - Can I force an update using submit when no form update is present?

是否可以使用 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>

但是在点击提交按钮时随机数不会更新。我假设这是因为它认识到没有对表单进行更新,所以它不会传回视图以生成新的随机数。 您可以通过将随机数传递到文本输入来 "trick" 它:-

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 中创建表单,然后在视图中创建表单实例吗?如果是这样,我如何确保页面刷新?

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

顺便说一下,这个应用程序是为了让用户 select 列表中的一个项目随机出现在 selection 的顶部,然后单击一个实际的 select离子或重复点击以获得尽可能多的随机建议。

感谢您的帮助

菲尔

如果您想强制刷新页面,您可以简单地使用带有 link 的锚标记返回此页面:

如果您的 urls.py 看起来像这样: ...

path('random/', views.test_random_view, name='random'),

...

您的模板将如下所示:

This doesn't work<br><br>
Here is a random number: <br>
{{ context.Randomid }}
<a href="{% url 'random' %}">Reset</a>

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

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