python – Django:如何在呈现视图后更新模型?

python – Django:如何在呈现视图后更新模型?,第1张

概述我有一个显示模型列表的视图.在呈现视图之后,需要更新某些模型的某些属性:即,用户应该在第一次访问时看到原始的,未更改的值以及连续访问时(或页面重新加载时)的更新值. 我以为我可以通过基于类的通用视图来实现这一点. official documentation暗示“在调用泛型视图之前或之后做一些额外的工作”(强调我的),但所有给出的例子都会在模型显示之前影响模型. 我调查了信号,但无济于事. 产生异 我有一个显示模型列表的视图.在呈现视图之后,需要更新某些模型的某些属性:即,用户应该在第一次访问时看到原始的,未更改的值以及连续访问时(或页面重新加载时)的更新值.

我以为我可以通过基于类的通用视图来实现这一点. official documentation暗示“在调用泛型视图之前或之后做一些额外的工作”(强调我的),但所有给出的例子都会在模型显示之前影响模型.

我调查了信号,但无济于事.

产生异步任务是一种选择,但是,因为我需要做的就是更新几个模型中的字段(可能是一个或没有)并保存它们,这对于手头的任务来说似乎有些过分.

可以使用AJAX请求来触发更新,或者使用自定义模板标记来显示相关字段并在此后更新它们.我不喜欢这两个,因为他们将应用程序逻辑移动到视图层. AJAX技术还增加了第二个请求的开销.

然而,我似乎没有别的选择,或者我呢?是否有更实用的技术可以在渲染模板后插入通用视图或请求并执行额外的逻辑?

解决方法 这里不需要任何聪明的东西.渲染模板不需要是视图的结尾 – 只有在您实际将其作为响应返回时才会出现.他们不必处于同一步骤.

所以:

def my_vIEw(request,params):    ... do something ...    response = render_to_response('my_template.HTML',{'foo': bar'})    ... do something after rendering ...    return response

现在,如果您需要在很多视图中执行此 *** 作,您可能希望在装饰器中执行此 *** 作:

def my_decorator(vIEw):    def my_func(request,params):        response = vIEw(request,params)        ... do something after rendering ...        return response    return my_func

现在您可以使用@my_decorator来装饰您的视图,并在渲染后执行 *** 作.

…或者,它只是发生在我身上,如果你想在每个视图中都这样做,你可以在中间件中完成它(只需定义process-response方法).

注释后编辑基于类的通用视图使用新的TemplateResponse类.您可以添加在使用post-render callback实际呈现模板后发生的任务.

总结

以上是内存溢出为你收集整理的python – Django:如何在呈现视图后更新模型?全部内容,希望文章能够帮你解决python – Django:如何在呈现视图后更新模型?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1192543.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存