所以,我想创建一个具有关联模板的类。当我运行类'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__
我做错了什么?
顺便说一句,如果某人有更好的建议来实现这一点,我愿意接受这些想法。答案 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
方法采用模板名称,并且您传递路径。
通常,避免像文件系统路径这样的硬编码,因为它会降低您的代码的可移植性。