Python. Работа с шаблонами HTML

Ранее мы уже рассматривали работу с HTML в python. Однако предложенный метод является достаточно громоздким. В связи с этим предложено решение использовать шаблоны. 

1. Первый шаблон

Создадим файл server5.py, содержащий следующий код:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
@app.route('/index')
def index():
    user = "Студент"
    return render_template('template1.html', title='Первый шаблон',
                           username=user)

if __name__ == '__main__':
    app.run(port=8080, host='127.0.0.1')

Теперь необходимо создать папку templates, в которую помещаем файл template1.html, содержащий код

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
        <title>{{ title }}</title>
    </head>
    <body>
        <h1>Привет, {{ username }}!</h1>
    </body>
</html>

Вместо {{ title }},  {{ username }} будут подставлены соответсвующие значения.

2. Условные конструкции в шаблонах

 {% if условие1 %}
        действия1
  {% elif условие2 %} 
        действия2
 {% else %} 
       действия3
 {% endif %}

Пример.

<body>
 {% if xx % 2 == 0 %}
        <div>{{ xx }} - чётное число</div>
 {% else %}
       <div>{{ xx }} - нечётное число</div>
 {% endif %}
</body>

3. Циклические конструкции

{% for переменная in набор значений %}
    код
{% endfor %}

Пример. Создаем в паке template файл template2.html:

<html>
  <head>
    {% if title %}
    <title>{{title}} </title>
    {% else %}
    <title>Безымянный блог</title>
    {% endif %}
  </head>
  <body>
      <h1>Расписание: {{user.nickname}}</h1>
     {% for bb in bbs %}
     <p>{{bb.time}}: <b>{{bb.name}}</b></p>
     {% endfor %}
  </body>
</html>

Далее создаем файл server6.py с кодом:

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
@app.route('/index')
def index():
    user = { 'nickname': 'Андрей' } 
    bbs = [ 
        { 
            'time': '6:00',
            'name': 'Подьём!' 
        },
        { 
            'time': '23:00',
            'name': 'Отбой' 
        }
    ]
    return render_template("template2.html",
        title = 'Эксперимент',
        user = user,
        bbs = bbs)

if __name__ == '__main__':
    app.run(port=8080, host='127.0.0.1')

4. Переменные в шаблонах

Пример создания переменной

{% set x = 10 %}

5. Наследование шаблонов

Позволяет поместить общую часть макета в некоторый шаблон, а затем этот шаблон использовать при генерации других шаблонов. Исправим пример пункта 3. Надо заменить в файле server6.py template2.html на template3.html.

При этом создаем в папке template файл base.html:

<html>
  <head>
    {% if title %}
    <title>{{title}} </title>
    {% else %}
    <title>Безымянный блог</title>
    {% endif %}
  </head>
  <body>
	{% block content %}{% endblock %}  </body>
</html>

А в файл template3.htnl пишем следующее:

{% extends "base.html" %}
{% block content %}
      <h1>Расписание: {{user.nickname}}</h1>
     {% for bb in bbs %}
     <p>{{bb.time}}: <b>{{bb.name}}</b></p>
     {% endfor %}
{% endblock %}
Поделиться:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • LiveJournal
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • StumbleUpon
  • Technorati
  • БобрДобр
  • Memori.ru
  • МоёМесто.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.