#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. Ваш ответ действительно помогает мне. Моя проблема решена.