2

我正在使用python的瓶子框架来开发一个简单的网页。我无法理解如何将字典传递给子模板。示例代码:

神话:

{
message: "Hello World",
...other template vars ... 
}

路由器.py

@route('/index.html')
@view('index.tpl')
def index():
    return mydictionary

意见/index.tpl

<body>
%include subpage1 ......  <-- need to pass mydictionary here
...other stuff ...
</body>

视图/subpage1.tpl

<div>This is a test: {{message}}</div>

文档页面指出:

*%include 语句:您可以使用 %include sub_template [kwargs] 语句包含其他模板。sub_template 参数指定要包含的模板的名称或路径。该行的其余部分被解释为一个逗号分隔的 key=statement 对列表,类似于函数调用中的关键字参数。它们被传递给子模板,类似于 SimpleTemplate.render() 调用。也允许传递 dict 的 **kwargs 语法*:

但是,没有给出如何将带有此 **kwargs 的字典传递给子模板的示例。有人做过吗?如果我只是说 %include subpage1 mydictionary,bottle 会抱怨 mydictionary 未定义(即使 mydictionary 是全局字典 [在 Router.py 中定义])。

问候GA

4

3 回答 3

1

我通过在模板文件中执行以下操作解决了这个问题:

意见/index.tpl

<body>
%from mydictfile import * <-- importing mydict here
%include subpage1 mydict  
...other stuff ...
</body>

我的字典文件:

mydict = {
message: "Hello World",
...other template vars ... 
}

这似乎对我有用。

于 2012-07-24T05:21:38.657 回答
0

您需要关键字参数。尝试:

%include subpage1 mydict=mydict ...
于 2012-07-23T14:07:16.263 回答
0

作为@GA's answer的变体,我访问了模板中主程序中定义的变量:

% from __main__ import app
blah blah {{app.config.my_config}} blah

编辑:在 Python 2.6 下我不得不使用(从 mybottleapp.py 导入):

% from mybottleapp import app

我还不够 Python 专家来理解为什么会这样。

于 2013-06-18T00:53:54.283 回答