Python - 模板类

时间:2013-12-09 08:57:05

标签: python django templates python-2.7 django-templates

所以,我想创建一个具有关联模板的类。当我运行类'render()方法时,模板被处理并作为字符串返回。

这是我到目前为止所做的:

class MyClass():
    ...
    def render(self):
        with open(self._template, O_RDONLY | O_NONBLOCK) as template_file:
            html = template_file.read()
        tpl = Template(html)
        return tpl.render(self._template_variables)

但这会引发错误:

AttributeError: __exit__

我做错了什么?

顺便说一句,如果某人有更好的建议来实现这一点,我愿意接受这些想法。

3 个答案:

答案 0 :(得分:3)

该行

template_file.close()
不应在with语句中调用

,因为它的目的是自动释放资源。 AttributeError正在被抛出,因为基本上你关闭了两次文件。

答案 1 :(得分:2)

带有运算符的

使 close()方法冗余

答案 2 :(得分:1)

我不确定为什么要复制django中提供的功能;但如果必须,请使用render_to_string

import os
from django.template.loader import render_to_string

class FooClass(object):
    def render(self):
       return render_to_string(os.path.basename(self._template),
                               self._template_variables)

我正在使用basename,因为render_to_string方法采用模板名称,并且您传递路径。

通常,避免像文件系统路径这样的硬编码,因为它会降低您的代码的可移植性。