0

我正在使用带有 Mako 模板的 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 项目中的什么地方呢?

4

1 回答 1

2

为什么不每次都将相同的字典返回给模板?那是(毕竟)模板的预期输入。如果您不默默地忽略问题,它将真正有助于避免模板中的潜在错误。当然,您可以跨视图抽象这些东西。

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

于 2012-04-09T14:13:05.727 回答