【问题标题】:How to structure Jinja2 templates when displaying two versions of the same object?显示同一对象的两个版本时如何构造 Jinja2 模板?
【发布时间】:2013-01-19 21:14:07
【问题描述】:

我正在使用 Python/Flask/Jinja2 构建一个涉及用户创建列表的网站。每个列表都有一个到期日期,因此每个列表要么处于活动状态,要么已过期。

每个列表都有自己的页面mysite.com/listings/<listing_id>。过期的列表页面看起来与活动列表页面不同。差异可能很多,但页面的高级结构将是相同的(毕竟,两者都是同一网站上的列表)。

构建模板和逻辑的最佳方式是什么?我看到两个选项:

首先,我可以创建两个 Jinja2 模板:listing.htmllisting_expired.html。视图函数会判断一个列表是活跃的还是过期的,然后渲染合适的模板。缺点是这两个模板必须保持同步。

或者,我可以只有一个模板:listing.html。然后,模板中将包含用于测试列表是否过期的逻辑。如果模板已过期,将使用模板的一部分,如果未过期,则使用另一部分(使用大的if-else 语句)。

构建这个的正确方法是什么?

【问题讨论】:

    标签: flask jinja2


    【解决方案1】:

    您可以为此使用 jinja 模板继承。使用泛化您创建一个基本模板并使用两个子模板(列表和过期)和子块扩展此模板以创建您的视图。结论:三个没有大 if-else 的模板。

    【讨论】:

      【解决方案2】:

      我认为最好的方法是拥有两个不同的模板,并由它们继承高级结构。

      【讨论】:

        猜你喜欢
        • 2010-10-13
        • 1970-01-01
        • 1970-01-01
        • 2015-05-23
        • 1970-01-01
        • 1970-01-01
        • 2023-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多