【发布时间】:2020-11-27 19:25:52
【问题描述】:
我对 Flask 和 Jinja 比较陌生,我遇到的问题更像是一个“最佳实践”问题,因为我可以用我目前所知道的成功实现我所需要的,但感觉有点笨拙。此外,我还偶然发现了一种我没有预料到的副作用,我希望一开始就可以完全避免。
我有一个非常标准的 route 定义,它呈现一个 Jinja HTML 页面。在这个页面上有一些按钮,根据某些预先确定的条件,我想让它们可见。这是我迄今为止创建的:
@app.route('/some/route/')
def index(foo, bar):
button = {
'create': False,
'update': False,
}
if foo:
button['create'] = True
if bar:
button['update'] = True
return render_template('index.html', button=button)
在神社:
<!-- Somewhere on the page, I might want to show this button -->
{% if button.create %}
<button>Create</button>
{% endif %}
<!-- Somewhere else on the page, I might want to show this other button -->
{% if button.update %}
<button>Update</button>
{% endif %}
乍一看,这应该可以正常工作。但不幸的是,您可能已经发现了这个问题:.update 是 built-in method update of dict object,所以虽然我的 Create 按钮的行为符合预期,但我的 Update 按钮始终可见。
所以我的想法是:
- 由于在我的按钮名称中使用保留字的风险,我将不得不为它们命名,可能从
button.update更改为button.show_update。我可以,但它没有我想要的那么短和重点。 - 我真的不想像
button_create和button_update那样单独声明每个按钮,因为那样我必须将每个按钮单独传递给render_template(),这只会让大量按钮和其他数据变得混乱提供模板。 - 首先是否有一种更好的方法来处理这种我不知道的情况?还是 Jinja 充满了这些小陷阱?
我尝试过搜索,但没有任何东西能接近我正在寻找的东西......也许我只是在想这整件事?......
【问题讨论】:
-
我会尝试将 button.name 分配给 'create' 或 'update' 并简化 python 和 jinja 中的内容?
-
@gittert 恐怕我不明白你的建议,你能举一个单行的例子吗?