【问题标题】:Handling button visibility in Flask with Jinja使用 Jinja 处理 Flask 中的按钮可见性
【发布时间】: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 %}

乍一看,这应该可以正常工作。但不幸的是,您可能已经发现了这个问题:.updatebuilt-in method update of dict object,所以虽然我的 Create 按钮的行为符合预期,但我的 Update 按钮始终可见。

所以我的想法是:

  • 由于在我的按钮名称中使用保留字的风险,我将不得不为它们命名,可能从button.update 更改为button.show_update。我可以,但它没有我想要的那么短和重点。
  • 我真的不想像button_createbutton_update 那样单独声明每个按钮,因为那样我必须将每个按钮单独传递给render_template(),这只会让大量按钮和其他数据变得混乱提供模板。
  • 首先是否有一种更好的方法来处理这种我不知道的情况?还是 Jinja 充满了这些小陷阱

我尝试过搜索,但没有任何东西能接近我正在寻找的东西......也许我只是在想这整件事?......

【问题讨论】:

  • 我会尝试将 button.name 分配给 'create' 或 'update' 并简化 python 和 jinja 中的内容?
  • @gittert 恐怕我不明白你的建议,你能举一个单行的例子吗?

标签: html flask jinja2


【解决方案1】:

我使用烧瓶已经有一段时间了,但我会尝试这样的事情。我会去掉你的 python 代码和 jinja 模板中的 2 个 if 语句。请记住,我不了解您的应用程序,但我相信您明白这一点。 我使用了一个else,它可能可以与elif 或即使bar 交换。任何适合您的需求。

 @app.route('/some/route/')
 def index(foo, bar):
     buttons = []

    if foo:
        buttons.append('create')
    if bar:
        buttons.append('update')

   return render_template('index.html', button = buttons)

在神社:

{% for button in buttons %}
    <button> {button} </button>
{% endfor %}

【讨论】:

  • Gittert,不幸的是,这并没有真正回答我的问题,因为这只是改变了按钮的标签,而我想要实现的是在单个页面上显示/隐藏许多按钮,我我正在寻找一种干净的方式来做到这一点。谢谢大家的建议,我很感激:)
  • 查看更新的答案,带有 for 循环。如有必要,如果您想为每个按钮传递更多信息,可以使用 dict 而不是列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 2011-03-31
  • 1970-01-01
  • 2019-01-21
  • 2012-03-25
相关资源
最近更新 更多