优化PartialRenderFormMixin性能

本文探讨了在Django中集成Bootstrap_toolkit时遇到的性能问题,并深入分析了问题原因。通过缓存Template对象并重复使用,显著提升了渲染速度。

前文(Django分多此渲染(输出)同一个form)提到一个集成bootstratp_toolkit的方案,实际使用过程中发现其性能非常之差。开始怀疑是因为render_fields字段筛选导致,经排查问题不在这里,后来怀疑是模板渲染的性能,但直接使用bootstrap_toolkit并未表现出性能问题。仔细研究了as_bootstrap的源代码,上文提到的方法在使用这个方法是逐个字段调用,每次调用都会进行一次模板的查找与编译过程因而性能就受到了严重的映像;而通常在模板上我们是将一个form传递进去,只做一次模板查找与编译,因而就不会产生问题。

修改方法也非常简单,只要缓存Template对象,每次使用其render方法即可:

  def _get_bootstrap_template(self, layout='vertical,false'):
        """
            Render a field or a form according to Bootstrap guidelines
            """
        params = split(layout, ",")
        layout = str(params[0]).lower()

        try:
            float = str(params[1]).lower() == "float"
        except IndexError:
            float = False

        return get_template("bootstrap_toolkit/field.html"),layout,float


    def as_bootstrip(self, render_fields=None, layout='vertical,false'):
        output = []
        template,layout,float = self._get_bootstrap_template(layout)
        for name, field in self.fields.items():
            if render_fields and  not name in render_fields:
                continue
            f = BoundField(self, field, name)
            output.append(template.render(
                Context({
                    'field': f,
                    'layout': layout,
                    'float': float,
                })
            ))

        return mark_safe(u''.join(output))

转载于:https://www.cnblogs.com/Ankh/archive/2012/10/13/2722659.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值