Створюємо простий блог на Bottle, частина 2

4 хв. читання

Продовжимо розглядати основи роботи з bottle. Для тих, хто пропустив першу статтю: Створюємо простий блог на Bottle, частина 1.

Шаблонізатор

Bottle поставляється з швидким і потужним вбудованим движком-шаблонізатором SimpleTemplate Engine. Для рендерингу шаблона ми можемо використовувати функцію template(), або декоратор view(). Все, що вам потрібно зробити, це вказати ім'я шаблону і змінні, які ви хочете передати в шаблон як ключові аргументи. Приклад з використанням функції template():

    @route('/hello')
    @route('/hello/<name>')
    def hello(name='Світ'):
        return template('hello_template', name=name)

Наш код завантажить шаблон hello_template.tpl та відрендерить його зі змінною name. За замовчуванням bottle шукає шаблони в теці _'./views/'. _Якщо потрібно, можливо додати або видалити шляхи шаблонів за допомогою bottle.TEMPLATE_PATH списку.

    import bottle
    
    bottle.TEMPLATE_PATH.remove('./views/')
    bottle.TEMPLATE_PATH.append('./templates/')

Приклад використання декоратору:

    @route('/hello')
    @route('/hello/<name>')
    @view('hello_template')
    def hello(name='Світ'):
        return dict(name=name)

В декоратор view() ми передаємо назву шаблона, а нашою функцією hello повертаємо словник зі змінними.

Синтаксис шаблонізатора

І одразу до прикладу:

    %if name == 'Світ':
        <h1>Привіт {{ name }}!</h1>
        <p>Ще якийсь текст.</p>
    %else:
        <h1>Привіт {{ name.title() }}!</h1>
        <p>Як ти?</p>
    %end

Знаком % ми виділяємо python код. Синтаксис майже повністю ідентичний за винятком того, що нам потрібно вручну вказувати кінець блоку за допомогою %end. Також нам потрібно обертати наші змінні або функціїї в подвійні фігурні дужки з обох сторін: {{ змінна }}

Відзначу, що шаблонізатор автоматично екранізує всі змінні в шаблонах, для захисту від XSS атак, якщо вам потрібно вставити якийсь html код на сторінку, потрібно вказати перед ім'ям змінної знак оклику(!):

    >>> template('{{html_code}}', html_code='<b>Будь-який текст</b>')
    u'<b>Будь-який текст</b>!'
    >>> template('{{!html_code}}', html_code='<b>Будь-який текст</b>')
    u'<b>Будь-який текст</b>'

Можливим є і вставка блоку python коду прямо в вашому шаблоні за допомогою "<% ... %>":

    <p>Текст вище блоку</p>
    <%
      # Блок python коду
      name = user.get_username()
    %>
    <p>Якийсь інший текст знизу</p>

Також в кожному шаблоні ми маємо доступ до передвстановлених ключових слів:

include(sub_template**, ****variables)

Виконуює рендер суб-шаблону з визначеними змінними і вставляє його в поточний шаблон:

    % include('header.tpl', title='Заголовок сторінки')
    Контент
    % include('foother.tpl')

rebase(name**, ****variables)

Маркує поточний шаблон, щоб потім включити його в інший. Після рендеру кінцевий текст зберігається в змінній base та передається в батьківський шаблон.

    % rebase('base.tpl', title='Заголовок сторінки')
    <p>Контент сторінки</p>

Та base.tpl:

      <title>{{ title or 'Без заголовку' }}</title>
    
    
      {{ !base }}
    
defined(_name_)

Повертає True, якщо змінна визначена і навпаки.

get(_name, default=None_)

Повертає змінну або стандартне значення.

setdefault(_name, default_)

Якщо змінна невизначена, присвоює їй стандартне значення. Повертає саму змінну.

Приклад:

    % setdefault('text', 'Будь-який текст')
    <h1>{{get('title', 'Без заголовка')}}</h1>
    <p> {{ text }} </p>
    % if defined('author'):
      <p>Автора статті: {{ author }}</p>
    % end

Заключення

Ми пройшлись по стандартному шаблонізатору bottle. Стаття вийшла трохи суховатою та без практичних прикладів, але я це виправлю в 3 частині, в якій ми перейдемо до практики: підключимо базу даних, статику та створимо сторінку входу в наш блог!

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 6.2K
Приєднався: 7 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація