python – Django,在渲染模板之前执行templatetag

我有一个Django应用程序,有点像一个网上商店.在应用程序中,POST在名为posthandler.py的模板标签中处理,就像这样

{% load posthandler %}
{% posthandler %}

在始终加载的index.html中.之后,在文件中有这样的主要位

{% block primary %}{% endblock %}

现在,该主位显示可能已在后处理程序位中调整的值stock.意思是,价值可能是陈旧的.这具有人们点击某个项目,将其添加到他们的订单列表的效果,但是在库存值正确反映数据库中的值之前需要两次刷新的页面.

我认为这是因为模板标签的处理顺序是这样的;

>用户单击按钮添加到订单列表
>页面通过视图重新加载,首先根据数据库中当前的内容在index.html中呈现库存值
> posthandler.py运行,从库存中减去一个,因此DB现在是最新的.
>页面显示错误的编号,因为在调整之前从DB检索到该值.

我想在视图中处理帖子,但我希望在所有不同的页面上运行相同的posthandler,所以这似乎不太可行.有一个更好的方法吗?或者,我可以让主要块仅在templatetags之后执行吗?

最佳答案 处理模板中的表单确实是一个设计错误.使用
middlewares应该适合您的需求.

另一种解决方案是创建一个View mixin,并使所有视图都从该mixin继承.但是使用中间件应该会更好.

但是,为什么没有一个页面处理此POST请求,并在表单处理后重定向到准确的页面?

点赞