【问题标题】:Flask render image (and data)Flask 渲染图像(和数据)
【发布时间】:2014-01-29 12:58:03
【问题描述】:

我有一个非常简单的博客站点,由 Flask 和 peewee orm 支持。仅(降价)帖子和图片。图像有图像文件(显然)、标题和简要说明。我希望能够添加一个 filtertag 之类的东西,基本上在我的帖子的降价中放入类似{{ img.id|3 }} 的东西,并让它用id=3div 中,带有标题和描述?

【问题讨论】:

    标签: flask jinja2


    【解决方案1】:

    您可以使用宏和 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。

    在这里,我假设您的对象为 urltitledescription。如果您有提供图片的路线,也许您想要的是 url_for('some_route', id=id) 而不是 {{ obj.url }}

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

    【讨论】:

    • 正是我需要的。谢谢先生。
    • 我无法使用此代码显示图像。是不是“3.jpg”的位置一定要定位?
    【解决方案2】:

    对于 Jinja2,您可以使用 template_filter 添加自己的过滤器。过滤器可以带参数。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 2021-03-28
      • 2023-03-22
      • 1970-01-01
      • 2021-10-18
      • 2019-08-04
      相关资源
      最近更新 更多