yaml загрузил словарь в виде строк без кавычек и скобок в шаблоне jinja

#python #flask #jinja2

#python #flask #jinja2

Вопрос:

Я начинаю использовать Jinja, так что, возможно, вопрос тривиален, и я не понял (пока), как работают jinja и flask.

Что я хочу сделать, так это использовать файл yaml с некоторыми значениями (не слишком вложенными, но все же немного), загрузить его как словарь, передать значения словаря в шаблон jinja и использовать flask для рендеринга конечного html-файла / ов.

Это очень маленький скрипт, который я использую для flask:

 from flask import Flask, render_template
import yaml
import os

file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'example.yaml')

app = Flask(__name__)

my_dic = yaml.safe_load(open(file_path))

@app.route("/")
def template_test():
    return render_template('base.html', my_dic=my_dic)


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

это шаблон jinja:

 <!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <div class="container">
      <p>
        {{ my_dic['who']}}
      </p>
    </div>
  </body>
</html>
  

и это супер глупое содержимое файла yaml (которое должно стать богаче многими другими значениями):

 who:
  - My string to view
  

Теперь это результат, который я вижу в html:

введите описание изображения здесь

как вы можете видеть, вокруг строки есть [] и ' . Я мог бы найти правильный способ (и я уверен, что он есть) для отображения только содержимого строки.

Спасибо за любые предложения

РЕШАЕМАЯ

Спасибо за предложения. Проблема заключалась в том, что значения считывались как массив, и мне приходилось зацикливать их:

 {% for i in my_dic.who %}
  <p>
    i
  </p>
{% endfor %}
  

Ответ №1:

Я думаю, проблема в том, что переменная, которую вы пытаетесь отобразить, является массивом — и jinja отображает ее как таковую. Но вы хотите, чтобы он отображался как единственное значение, а это не так.

Вам следует попробовать отобразить переменную в виде массива с помощью цикла for: http://jinja.pocoo.org/docs/2.10/templates

Комментарии:

1. ` {% для i в my_dic.who %} {{ i }} {% endfor %}` также не работает..

2. Вы получаете тот же результат? Можете ли вы поделиться фрагментом?

3. нет, вообще пустой результат. Я просто заменил {{ my_dic['who']}} на цикл в другом комментарии

4. Это означает, что в данном случае ключ не найден. my_dic.who, вероятно, оценивает значение none. Попробуйте использовать вариант со скобками