【问题标题】:Bottle @view vs template()瓶 @view 与模板()
【发布时间】:2014-03-24 17:09:11
【问题描述】:

使用template()渲染视图:

@get('/start/<page:int>')
def start(page=1):
    return template('start', page=page)

使用view() 装饰器的相同示例:

@get('/start/<page:int>')
@view('start')
def start(page=1):
    return dict(page=page)

这两者除了个人喜好有什么区别吗?

【问题讨论】:

  • 我会说:如果您返回一个 dict 并且预期的内容类型是 json:不渲染模板而是返回 json 字符串。你能验证这是否可行吗?

标签: python frameworks template-engine bottle


【解决方案1】:

好吧,我不是专业的开发人员,所以我可能会说一些违背编码中最基本的良好礼仪的话,但我发现使用 return template() 更有用,因为我可以使用多个模板,而使用视图装饰器是不可能的。例如:

@get('/start/<page:int>')
def start(page=1):
    return template('header',username=username)+template('start', page=page)+template('foot')

当然,可以在模板中使用 @views 和 %include 子模板来做到这一点,并且可能还有一百万种其他方式,但是......这是不同的!

...或者是否可以在一个@view 中调用多个模板?

【讨论】:

  • 此外,如果您的模板使用需要关闭的开放流/阅读器,则不会使用装饰器。示例:with query.reader() as results: return template('start', results=results)
【解决方案2】:

我的理解是:不,除了偏好没有区别。 (就像您可以编写插件或使用路由装饰器来完成许多相同的任务一样。)它们是实现相同目标的等效方法:渲染模板。

The Bottle template docs 支持这个:

要渲染模板,您可以使用 template() 函数或 view() 装饰器。

...

view() 装饰器允许您返回带有模板变量的字典,而不是调用 template()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多