Как получить доступ к каждому словарю индивидуально в списке словарей, используя Jinja2? - PullRequest
1 голос
/ 02 марта 2020

У меня есть Python список из нескольких словарей в Flask, как показано ниже (я также использовал List Compreatsion для доступа к словарям):

app = Flask(__name__)
class Item:
    def __init__(self, vals):
        self.__dict__ = vals

@app.route('/')
def news_page():
    news = [{ "News" : "ABC", "Link" : "http://exampleabc.com", "Date": "01/03/20" },
           { "News" : "DEF", "Link" : "http://exampledef.com", "Date": "02/03/20" },
           { "News" : "GHI", "Link" : "http://exampleghi.com", "Date": "03/03/20" }]
    return render_template('news_screen.html', news = [Item(i) for i in news])

if __name__ == '__main__':
    app.run(debug = True)

Мой HTML Шаблон выглядит следующим образом:

<table>
     {% for dict_item in news %}
          <div>
            <tr> {{ dict_item.News }}  </tr> <br>
            <tr> {{ dict_item.Link }}  </tr> <br>
            <tr> {{ dict_item.Date }}  </tr> 
          </div> 
     {% endfor %}
</table>

Это, к сожалению, возвращает все три словаря (AB C, DEF, GHI), хотя мне нужен только один за раз, чтобы я мог отображать их на разных слайдах по отдельности.

Текущий вывод:

ABC
http://exampleabc.com
01/03/20

DEF
http://exampledef.com
02/03/20

GHI
http://exampleghi.com
03/03/20

Как я могу получить доступ к каждому словарю в отдельности, чтобы я мог одновременно отображать только "AB C" Новости, ссылку и дату?

Ожидаемый результат:

ABC
http://exampleabc.com
01/03/20

1 Ответ

2 голосов
/ 02 марта 2020

Вам не нужно писать дополнительный код для доступа к каждому элементу. Просто передайте словарь Jinja Tempalte. Здесь вы можете изменить несколько небольших изменений.

@app.route('/')
def news_page():
    news = [{ "News" : "ABC", "Link" : "http://exampleabc.com", "Date": "01/03/20" },
           { "News" : "DEF", "Link" : "http://exampledef.com", "Date": "02/03/20" },
           { "News" : "GHI", "Link" : "http://exampleghi.com", "Date": "03/03/20" }]
    return render_template('news_screen.html', news = news )

В конце концов, если вы хотите получить элементы в шаблоне Jinja.

<table>
     {% for dict_item in news %}
          <div>
            <tr> <a href="{{ dict_item.Link }}">{{ dict_item.News }}</a></tr> <br>
            <tr> {{ dict_item.Link }}  </tr> <br>
            <tr> {{ dict_item.Date }}  </tr> 
          </div> 
     {% endfor %}
</table>

Иначе, если вы хотите выделить один элемент в шаблоне Jinja.

<div class="panel">
      <div class="panel-title"><a href="{{ news[0].Link }}">{{ news[0].News }}</a></div>
      <div class="panel-body">{{news[0].Date}} </div>
</div>
...