我正在使用带有Mako Templating的Pyramid 1.3。我有一个名为“create”的方法的视图,它将空字典返回给模板。我打算使用相同的“create.mako”模板进行创建和编辑。我在我的输入字段中放置了类似的上下文变量:
<input type="text" id="nameInput" value="${content['name']}" />
这个问题是当我尝试加载create方法时出现如下错误:
<input id="nameInput" value="${content['name']}" type="text" class="span8" style="background-color: #EED3D7;" />
TypeError: 'Undefined' object is unsubscriptable
这当然是正确的,因为create方法只返回一个空字典,所以没有键“content”。这在Pylons 0.9.7中曾经很好;如果它不存在,它只是一个空字符串。
我从StackOverflow找到了一个解决方案:
import mako.runtime
mako.runtime.UNDEFINED = ''
但是我在哪里把它放在我的Pyramid项目中?
答案 0 :(得分:2)
为什么不每次都将相同的dict返回给模板?这毕竟是模板的预期输入。如果您不默默地忽略问题,它将真正有助于避免模板中的潜在错误。当然,您可以跨视图抽象这些内容。
def _create_tmpl(name='', ...):
return {
'name': name,
}
def create_view(request):
return _create_tmpl()
def edit_view(request):
return _create_tmpl(name='Mark')
无论如何,如果你真的真的想要,你可以添加到你的设置(可能在你的INI中)mako.strict_undefined = false
。