Flask 烧瓶渲染图像(和数据)

Flask 烧瓶渲染图像(和数据),flask,jinja2,Flask,Jinja2,我有一个非常简单的博客网站,由Flask和peewee orm支持。仅限(降价)帖子和图片。图像包含图像文件(显然)、标题和简要说明。我希望能够添加一个过滤器或标签或其他东西,并基本上在我的帖子中添加一些标记,比如{{img.id | 3},并让它在div中呈现带有id=3的图像,以及标题和描述?对于Jinja2,您可以添加自己的过滤器。过滤器可以获取参数 如果模板中已有具有链接属性的图像对象,则最好使用此属性 如果您对此图像有特殊的路由,最好使用带有指定参数的url\u。如果它有许多参数,您始

我有一个非常简单的博客网站,由Flask和peewee orm支持。仅限(降价)帖子和图片。图像包含图像文件(显然)、标题和简要说明。我希望能够添加一个过滤器或标签或其他东西,并基本上在我的帖子中添加一些标记,比如
{{img.id | 3}
,并让它在
div
中呈现带有
id=3
的图像,以及标题和描述?

对于Jinja2,您可以添加自己的过滤器。过滤器可以获取参数

如果模板中已有具有链接属性的图像对象,则最好使用此属性


如果您对此图像有特殊的路由,最好使用带有指定参数的
url\u。如果它有许多参数,您始终可以添加自定义筛选器。

对于Jinja2,您可以使用添加自己的筛选器。过滤器可以获取参数

如果模板中已有具有链接属性的图像对象,则最好使用此属性


如果您对此图像有特殊的路由,最好使用带有指定参数的
url\u。如果它有许多参数,您总是可以添加自定义过滤器。

您可以使用宏和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 %}
{%macro-img(id)%}
{%set obj=get_image(id)%}{{#这里我调用模板全局函数#}
{{obj.title}}
{{obj.description}}
{%endmacro%}
现在,您可以调用
{{img(id=3)}
甚至
{{img(3)}}
img
宏打印HTML

在这里,我假设您的对象具有
url
title
description
。如果你有一个路径来为你的图像服务,也许你想要的是类似于
url\u的('some\u route',id=id)
而不是
{{obj.url}


当然,您可以从my
get\u image
函数提供HTML,甚至可以从my宏查询您的数据库,但这样我就把关注点分开了。

您可以使用宏和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 %}
{%macro-img(id)%}
{%set obj=get_image(id)%}{{#这里我调用模板全局函数#}
{{obj.title}}
{{obj.description}}
{%endmacro%}
现在,您可以调用
{{img(id=3)}
甚至
{{img(3)}}
img
宏打印HTML

在这里,我假设您的对象具有
url
title
description
。如果你有一个路径来为你的图像服务,也许你想要的是类似于
url\u的('some\u route',id=id)
而不是
{{obj.url}


当然,您可以从我的
get\u image
函数中提供HTML,甚至可以从我的宏中查询您的数据库,但这样我就可以分离关注点。

正是我所需要的。谢谢,先生。我不能用这个代码显示图像。“3.jpg”是否必须位于该位置?这正是我所需要的。谢谢,先生。我不能用这个代码显示图像。是否“3.jpg”必须位于该位置?