ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

python: Flaskでzip()を使いたい時

備忘録です。

Pythonで2つのリストをzipしfor文で取り出すということがあると思いますが、今回はそれをFlaskで実行する方法についての備忘録です。

 

Zipはhtml側で使えず

ということでapp.pyの方でzip化して渡すとうまく行きました。

@app.route('/<int:id>/showproject', methods=['GET'])
def showproject(id):
    project = Project.query.get(id)
    if request.method == 'GET':
        # リストをあらかじめ作って渡すこと可能
        li1 =['a', 'b', 'c', 'd', 'e']
        li2 = ['佐藤', '田中', '鈴木', '斎藤', '吉竹']
        # htmlでzipを使用したいときは先にzip化して渡す
        return render_template('showproject.html', project=project, l=zip(li, li2))

引数として渡す際に、zipし変数に格納。

{% extends 'base.html' %}

{% block content %}

  <div class="container">
    <a href="/{{project.id}}/updateproject" role="button" class="btn btn-primary float-end">編集</a><h1 class="mb-3">プロジェクト詳細</h1>
    <div class="mb-3">
      <p class="border-bottom">タイトル</p>
      <h4>{{project.projecttitle}}</h4>
    </div>
    <div>
      <p class="border-bottom">概要</p>

      <p>{{project.overview}}</p>
    </div>
    <div>
      <p class="border-bottom">実現したいことリスト</p>
      <ul class="list-group">
        {% for elem, status in l %}
        <!-- Noneの行は表示しない方法 -->
        {% if elem %}
        <li class="list-group-item" style="{% if status == 1 %}background-color:#8E8E8E;{% else %}background-color:#FFFFFF;{% endif%}">{{elem}}</li>
        {% endif %}
        {% endfor %}
      </ul>
    </div>
  </div>

{% endblock %}

引数で渡されたlという変数を{% for elem, status in l %}この形で使用します。lはzipされているので、2つの値が出てきます。それをelemとstatusという変数でこのコードでは拾っている感じです。