2014-02-17 87 views
1

我试图打印出条目列表,总条目和Flask中生成的时间。在我的Python代码我有:烧瓶 - 如何在同一页上打印不同的变量

def stream_template(template_name, **context): 
app.update_template_context(context) 
t = app.jinja_env.get_template(template_name) 
rv = t.stream(context) 
return rv 

@app.route('/', methods=['POST']) 
def get_data(): 
    # Dong something here to prepare for data 
    total_entry = get_total_entry() 
    generated_time = get_generated_time() 
    entry_list = get_entry() 
    def blog_entries(): 
     for entry in entry_list: 
      yield entry 
    return Response(stream_template('blog.html', data=blog_entries())) 

我有blog_entry()为:(用于测试目的) 返回[在范围对于i(5)]

在blog.html我有: (为了测试目的,我们将每个条目视为int)

{% for i in data: %} 
<br>Entry: {{ i }}</br> 
{% endfor %} 

因此,我会得到所有条目的列表。不过,我还希望在打印出条目的同一页面之前和之后打印出total_entry和generated_time。我应该如何更改我的Python代码和html模板?

E.g:我想有这样的:

Total entry: 5 
Generated time: 0.001 
Entry: 1 
Entry: 2 
Entry: 3 
Entry: 4 
Entry: 5 

太谢谢你了!

回答

1

只需将变量作为**context关键字参数传递即可。这应该工作,但我没有测试过。

以下是stream_template的文档。

@app.route('/', methods=['POST']) 
def get_data(): 
    # Dong something here to prepare for data 
    def blog_entries(): 
     for entry in get_entry(): 
      yield entry 
    return Response(stream_template('blog.html', 
            data=blog_entries(), 
            total_entries=get_total_entry(), 
            gen_time=get_generated_time())) 

Jinja2模板。将格式更改为列表。您可以使用正确的名称访问Jinja2模板中的**context关键字参数。

<ul> 
    <li>Total entries: {{ total_entries }}</li> 
    <li>Generated time: {{ gen_time }}</li> 
    {% for i in data: %} 
    <li>Entry: {{ i }}</li> 
    {% endfor %} 
</ul> 
+0

嗨感谢您的回复,我已经明白了,但是当我尝试这样做时,它会引起500内部服务器错误。问题来自“{%for i in data:%}”,因为调试器会说“TypeError:'NoneType'对象不可迭代”。我之前没有这个问题:( – Kiddo

+0

'get_entry'怎么样,请编辑它到你的问题 – msvalkon

+0

我认为问题是由于Flask(在网站上)给出的stream_templates函数,它需要1个参数虽然我一次发送3个论据 – Kiddo