Similar presentations:
Flask. Схема базового проекта
1.
Flask2.
Схема базового проектаroot/
venv/
app/
__init__.py
routes.py
main.py
3.
“Привет мир”.flaskenv
app/routes.py
FLASK_APP=mian.py
from app import app
main.py
from app import app
@app.route('/')
@app.route('/index')
def index():
return "Hello,
World!"
__init__.py
from flask import Flask
app = Flask(__name__)
from app import routes
4.
ШаблоныШаблон - текстовый файл с HTML-кодом и дополнительными элементами
разметки, которые обозначают динамический контент. Последний станет
известен в момент запроса. Процесс, во время которого динамическая
разметка заменяется, и генерируется статическая HTML-страница,
называется отрисовкой (или рендерингом) шаблона. Во Flask есть
встроенный движок шаблонов Jinja, который и занимается тем, что
конвертирует шаблон в статический HTML-файл.
5.
app/templates/index.htmlШаблоны
По умолчанию, Flask ищет
шаблоны в подкаталоге
templates внутри папки
приложения. Это поведение
можно изменить, передав
аргумент template_folder
конструктору Flask во время
создания экземпляра
приложения.
<!doctype html>
<html>
<head>
<title>{{ title }} - flask_site</title>
</head>
<body>
<h1>Hello, {{ user.username }}!</h1>
</body>
</html>
6.
Шаблоныapp/routes.py
from flask import render_template
from app import app
@app.route('/')
@app.route('/index')
def index():
user = {'username': 'Pavel'}
return render_template('index.html', title='Home', user=user)
7.
ШаблоныОперация, которая преобразует шаблон в полноценную HTML-страницу, рендеринг. Для рендеринга шаблона необходимо импортировать функцию,
render_template(). Эта функция принимает имя файла шаблона и
переменный список аргументов шаблона и возвращает тот же шаблон, но со
всеми заполнителями в нем, замененными фактическими значениями.
Функция render_template() вызывает движок шаблонов Jinja, который
поставляется в комплекте с фреймворком Flask Framework. Jinja заменяет
блоки {{ ... }} соответствующими значениями, заданными аргументами,
приведенными в вызове render_template().
8.
Логика на jinjaШаблоны поддерживают управляющие операторы, заданные внутри блоков
{% ... %}.
9.
<!doctype html><html>
<head>
{% if title %}
<title>{{ title }} - flask_site</title>
{% else %}
<title>Welcome to My Site!</title>
{% endif %}
</head>
<body>
<h1>Hello, {{ user.username }}!</h1>
</body>
</html>
10.
Циклы<!doctype html>
<html>
user = {'username': 'Pavel'}
posts = [
<head>
{% if title %}
<title>{{ title }} - flask_site</title>
{
'author': {'username': 'Alice'},
{% else %}
<title>Welcome to My Site</title>
'body': 'Привет!'
{% endif %}
},
</head>
{
<body>
'author': {'username': 'Mike'},
<h1>Hi, {{ user.username }}!</h1>
{% for post in posts %}
'body': 'Привет номер 2!'
}
]
return render_template('index.html', title='Home',
user=user, posts=posts)
<div><p>{{ post.author.username }} says: <b>{{ post.body }}</b></p></div>
{% endfor %}
</body>
</html>
11.
НаследованиеВ шаблонах можно создавать "родительские" шаблоны, и наследовать от
них другие шаблоны. Это значит, что можно использовать один и тот же
паттерн HTML кода (и не только!) в нескольких шаблонах, причём изменив
родительский шаблон изменятся все шаблоны, в которые было сделано
наследование.
12.
Наследованиеapp/templates/base.html
<!doctype html>
<html>
<head>
{% if title %}
<title>{{ title }} - Flask_site</title>
{% else %}
<title>Привет на сайте</title>
{% endif %}
</head>
<body>
<div>Site: <a href="/index">Home</a></div>
<hr>
{% block content %}{% endblock %}
</body>
</html>
13.
Наследование{% extends "base.html" %}
{% block content %}
<h1>Hi, {{ user.username }}!</h1>
{% for post in posts %}
<div><p>{{ post.author.username }} says: <b>{{ post.body }}</b></p></div>
{% endfor %}
{% endblock %}
programming