2014-01-29 60 views
1

我有一个非常简单的博客网站,由Flask和peewee orm支持。仅限(降价)帖子和图片。图像具有归档的图像文件(显然),标题和简要说明。我想是能够添加过滤标签什么的,基本上把我的职位像{{ img.id|3 }}降价,并将它呈现与id=3图像中的div,与标题和描述?烧瓶渲染图像(和数据)

回答

4

您可以使用宏和Python函数来做到这一点。

首先,添加一个全局模板。

@app.template_global() 
def get_image(id): 
    # not sure if this is the way to do it with peewee 
    return Image.select().where(Image.id == id).get() 

这样,您可以拨打{{ get_image(id=3) }}并获取图像对象。当然,它仍然不能解决你的问题。

要以您想要的方式生成HTML,请创建一个Jinja2宏以生成您的HTML块。现在

{% macro img(id) %} 
    {% set obj = get_image(id) %} {# here I'm calling the template global function #} 
    <img src="{{ obj.url }}" /> 
    <span class="title">{{ obj.title }}</span> 
    <span class="description">{{ obj.description }}</span> 
{% endmacro %} 

,你可以打电话{{ img(id=3) }}甚至{{ img(3) }}img宏打印HTML。

这里我假设你的对象是url,titledescription。如果您有一条路线来提供图片,也许您想要的内容类似url_for('some_route', id=id)而不是{{ obj.url }}

当然,您可以通过我的get_image函数来服务HTML,甚至可以从我的宏中查询您的数据库,但这样我分离了一些问题。

+0

正是我所需要的。谢谢你,先生。 – freethrow

+0

我无法使用此代码显示图像。 “3.jpg”是否必须位于该位置? – Gank

1

对于Jinja2,您可以添加自己的筛选器template_filter。过滤器可以接受参数。

如果您的模板中已经有链接属性的图像对象,那么最好使用此属性。

如果您有此图像的特殊路线,最好使用带指定参数的url_for。如果它有很多参数,你总是可以添加自定义过滤器。