Flask 当显示同一对象的两个版本时,如何构造Jinja2模板?

Flask 当显示同一对象的两个版本时,如何构造Jinja2模板?,flask,jinja2,Flask,Jinja2,我正在用Python/Flask/Jinja2构建一个网站,其中包括用户创建的列表。每个列表都有一个过期日期,因此每个列表都是活动的或过期的 每个列表都有自己的页面,位于mysite.com/listings/。过期的列表页面与活动的列表页面看起来不同。差异可能很多,但页面的高层结构将是相同的(毕竟,两者都是同一网站上的列表) 构造模板和逻辑的最佳方法是什么?我看到两种选择: 首先,我可以创建两个Jinja2模板:listing.html和listing\u expired.html。view函

我正在用Python/Flask/Jinja2构建一个网站,其中包括用户创建的列表。每个列表都有一个过期日期,因此每个列表都是活动的或过期的

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

构造模板和逻辑的最佳方法是什么?我看到两种选择:

首先,我可以创建两个Jinja2模板:
listing.html
listing\u expired.html
。view函数将确定列表是活动的还是过期的,然后呈现适当的模板。缺点是这两个模板必须保持同步

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


构建此结构的正确方法是什么?

我认为最好的方法是使用两个不同的模板并通过它们继承高层结构。

我认为最好的方法是使用两个不同的模板并通过它们继承高层结构。

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

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