我有一个Django应用程序,有点像网上商店。在应用程序中,POST在名为posthandler.py的模板标签中处理,如此
{% load posthandler %}
{% posthandler %}
在始终加载的index.html中。之后,在文件中有像这样的主要位
{% block primary %}{% endblock %}
现在,该主位显示可能已在后处理程序位中调整的值stock。意思是,价值可能是陈旧的。这具有人们点击某个项目,将其添加到他们的订单列表中的效果,但是在库存值正确反映数据库中的值之前需要两次刷新的页面。
我认为这是因为处理模板标签的顺序,就像这样;
我会考虑在视图中处理帖子,但我希望在所有不同的页面上运行相同的posthandler,所以这似乎不太合适。有一个更好的方法吗?或者,我可以让主要块仅在templatetags之后执行吗?
答案 0 :(得分:2)
处理模板中的表单确实是一个设计错误。使用middlewares应该符合您的需求。
另一种解决方案是创建一个View mixin,并使所有视图都从该mixin继承。但是使用中间件应该会更好。
但是,为什么没有一个页面可以处理此POST请求,并在表单处理后重定向到准确的页面?
答案 1 :(得分:0)
我觉得你在模板标签中做的事情不应该在那里完成。我从未读过关于此目的的限制,但我认为,从概念上讲,模板标签应该是无状态的,而不是修改数据库内容。
要在没有逻辑重复的情况下在视图中执行所需的工作,您可以使用基于类的视图,并让它们从您实现数据修改的常见Mixin类继承,或者使用通用装饰器修饰它们并在装饰师。
但是如果要对所有视图进行修改,那么中间件Antoine suggests可能就是这样。