Как проанализировать файл YAML с помощью python и Flask и отобразить результаты в Интернете?

#python #flask #yaml

#python #flask #yaml

Вопрос:

Я хотел бы создать простое веб-приложение, способное отображать результаты анализа файлов YAML с использованием python и Flask. Я написал код, и он работает, но результаты не такие, как ожидалось. Вот мой код:

 import yaml
from flask import Flask, request, render_template, redirect, url_for
#from pathlib import Path
app = Flask(__name__)

@app.route('/', methods=['GET','POST'])
def my_form_post():
    #path=Path('/Users/Devie Andriyani/EditFlask/categories.yaml') # set the path to your file here
    #if not path.exists():path.touch()
    if request.method == 'POST':
       #with open(path, 'w') as f:
           #f.write(request.form.get('Text Area',None))
        return redirect(url_for('my_form_post'))

    #with open(r'C:UsersDevie Andriyani/EditFlask/categories.yaml') as f:
    #my_dict = yaml.safe_load(f)
    a_yaml_file = open("categories.yaml")
parsed_yaml_file = yaml.load(a_yaml_file, Loader=yaml.FullLoader)
print(parsed_yaml_file["countries"])
print(parsed_yaml_file["sports"])
return render_template('index.html')

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

И вот мой HTML-код:

 <!DOCTYPE html>
   <head>
      <title>Hello</title>
   </head>

   <body>
      <form action="" method="POST">
            <p>Text Area</p>
            <p><textarea name="Text Area" rows="20" cols="50" value={{categories}}></textarea>
            </p>
            <input type="submit">
      </form>
   </body>
</html> 

И вот мой файл YAML:

 sports:
- soccer
- football
- basketball
- cricket
- hockey
- table tennis

countries:
- Pakistan
- USA
- India
- China
- Germany
- France
- Spain
 

И вот результат:
Я хочу, чтобы результаты синтаксического анализа отображались в текстовой области

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

1. какой ожидаемый результат? и что вы получаете сейчас.

2. Ожидаемый результат — результаты синтаксического анализа отображаются в текстовой области / на веб-странице, а не в (командной строке). Я получаю, что результаты синтаксического анализа отображаются на консоли, а не на текстовой области / веб-странице

3. согласно вашему коду, вы просто открываете файл и передаете его во внешний интерфейс. все правильно.. вы хотите куда-то передать данные?

4. Я хочу отображать данные во внешнем интерфейсе, а не только на консоли. У вас есть какие-либо идеи?

Ответ №1:

Вы открыли файл, сохранили его в переменной, но не передали его интерфейсу. Вы просто печатаете его, поэтому он печатается в консоли. Вы должны передать это интерфейсу.

 parsed_yaml_file = yaml.load(a_yaml_file, Loader=yaml.FullLoader)
# print(parsed_yaml_file["countries"]) # this will print in console not in frontend
# print(parsed_yaml_file["sports"])  # this too
return render_template('index.html', yml = parsed_yaml_file)
 

Здесь я передал содержимое файла parsed_yaml_file интерфейсу с именем yml . Итак, теперь мы можем получить доступ к этому во внешнем интерфейсе. Но у нас есть одна проблема. yaml.load вернет словарь. И если вы хотите отобразить в виде словаря, тогда не беспокойтесь. Но если вы хотите отображать сам YAML формат, вам не следует преобразовывать его в yaml. Вы напрямую передаете файл a_yaml_file .

Предположим, если вы хотите вывод yaml (надеюсь, вы прошли yml = a_yaml_file ), тогда во внешнем интерфейсе вы должны использовать pre tag.

 <pre>{{ yml }}</pre>
 

Если вам нужен словарь, (передайте yml = parsed_yaml_file ), просто используйте это во внешнем интерфейсе

 {{ yml }}
 

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

1. Большое вам спасибо, @NavaneethaKrishnan за ваш блестящий ответ. Но я все еще не понимаю, какой код мне следует изменить? Мне очень жаль, я всего лишь новичок и ученик.

2. В файле python обновите функцию render_template. там вы должны передать содержимое во внешний интерфейс

3. Привет @Navaneetha, я изменил код на основе вашего ответа, но результат не меняется

4. Большое вам спасибо, @Navaneetha. Ваш ответ действительно помогает мне. Моя проблема решена.