Посты с тэгом jinja


Simple Chat on Flask

Что обычно советуют, чтобы изучить какой-либо фреймворк? Правильно, написать свой маленький простой чат. А мы сделаем это на Flask. Получилось всего 43 строчки!

Так как мы будем использовать шаблонизатор Jinja, чтобы отображать сообщения из базы данных, нам понадобятся 2 формы: одна для вставки сообщений, а другая, для их множественного отображения:

Ну и добавим совсем немножко CSS, чтобы вставить табуляцию:

И вот что у нас вышло:

 Если кому интресно, весь проект можно глянуть на Github. :D



Microblog in Microframework

Каждый раз, когда я разговариваю с программистом о новом фреймворке или языке, он всегда советует мне написать простой чат. Но мы пойдем немного дальше и напишем очередного убийцу Twitter примитивный микроблог. 

А будем мы использовать Flask и Jinja. Второе - это очень удобный шаблонизатор для Python, он нам понадобится, чтобы заполнять динамическими данными страничку HTML. Ну, сейчас разберемся. 

Все наши посты будем хранить в SQLite, он прост и удобен, поэтому заранее заготовим схему базы данных:

Напишем обработчик запросов, серверную часть:

А вот здесь уже начинается самое интересное. Мы можем использовать Jinja, чтобы написать единую шапку для всех последующих страниц (как в ВК), чтобы она не повторялась в коде остальных страничек:

А вот и сама страничка, которая отображает посты:

Ну и чтобы это выгля



SaltStack: использование шаблонов jinja и хранилища pillar для гибкой настройки конфигураций


Что здесь интересного?


Статья предназначена для тех кто использует или думает использовать SaltStack в качестве инструмента для управления конфигурациями. Постараюсь очень кратенько поделится опытом использования этой системы для гибкого управления конфигурациями сервисов на примере Tinyproxy.
Это вторая статься в серии о SaltStack, первую читайте здесь.
Читать дальше →


Объявление флага в цикле Jinja2

Понадобилось мне тут создать флаг в цикле, который можно использовать где нибудь потом в шаблоне. По логике все должно выглядеть примерно так:

{% set exists = 0 %}
{% for i in range(5) %}
      {% if True %}
          {% set exists = 1 %}
      {% endif %}
{% endfor %}
{% if exists %}
    -->-->
{% endif %}
Но такой код не фурычит! exist всегда будет 0. Это особенность области видимости переменных в Jinja при присваивании.
Поэтому есть небольшой хак как это поправить:
{% set exists = [] %}
{% for i in range(5) %}
      {% if True %}
          {% do exists.append(1) %}
      {% endif %}
{% endfor %}
{% if exists %}
    -->-->
{% endif %}
Решение взято от сюда


Jinja2 Lorem ipsum dolor sit amet

Иногда в шаблоне нужно зафигачить какую-нибудь рыбу типа "Lorem ipsum dolor sit amet", часто в цикле итд. Для этого существует функция lipsum()
Вот пример:

{% for x in range(5) %}
  {{ lipsum()|truncate(150)|safe }}
  
{% endfor %}
И результат:

Justo aliquam faucibus lacus pulvinar commodo nisl, quisque est fusce venenatis mattis magnis arcu, hac felis parturient suspendisse a. Vitae ...


Porta tellus turpis leo suspendisse rutrum metus blandit, montes dis lacinia felis non, vehicula vivamus condimentum luctus massa, vehicula ...


Convallis molestie blandit viverra imperdiet eros dolor nam, ridiculus tortor duis blandit duis enim, cursus bibendum lobortis faucibus dui ...


Diam placerat risus porta litora consequat vel, accumsan tempus ligula laoreet a mollis rutrum, aptent est tortor pulvinar senectus, litora etiam. ...


Cursus non morbi non proin, porttitor



Перевод шаблонов Jinja в Pyramid


Основная документация как это делать здесь. Но как обычно есть нюансы.

Рабочий пример можно посмотреть установив шаблон. Устанавливаем pyramid_jinja2 и пишем:
pcreate -t pyramid_jinja2_starter yoyoyoyo
Если лень устанавливать пример, то нужно сделать следующее:
Добавить файл message-extraction.ini
[python: **.py]
[jinja2: **.jinja2]
encoding = utf-8
Добавить в setup.cfg
[extract_messages]
add_comments = TRANSLATORS:
output_file = myprojectname/locale/pyramid_promosite.pot
width = 80
mapping_file = message-extraction.ini


Перевод шаблонов Jinja в Pylons


Все точно также как и с mako, "Но есть нюансы"©
Добавьте в setup.py
    package_data={'myproject': ['i18n/*/LC_MESSAGES/*.mo']},
    message_extractors={'myproject': [
            ('**.py', 'python', None),
            ('templates/**.html', 'jinja2', None),
            ('public/**', 'ignore', None)]},
Добавьте в lib/base.py
from pylons.i18n.translation import _, ungettext
И что то типа того в config/environment.py
    # Create the Jinja2 Environment
    config['pylons.app_globals'].jinja2_env = Environment(loade


Jinja замена None Null итд на пустую строку

В питоне пустые значения возвращаются как None. Поэтому в шаблонах Jinja вместо пустых значений отображаются None. Что бы поправить это нужно изменить метод finalize. Пример из google groups

def silent_none(value):
     if value is None:
         return ''
     return value

from jinja2 import Environment
env = Environment()
env.finalize = silent_none 
Теперь вместо None будет писаться пустая строка ''. В pylons нужно править файл environment.py
def silent_none(value):
    """ Jinja fix output None
    For more details:
    http://groups.google.com/group/pocoo-libs/browse_thread/thread/490f6e6e8fca6a6c
    """
    if value is None:
        return ''
    return value

def load_environment(global_conf, app_conf):
    """Configure the Pylons environment via the ``pylons.config``
    object
    """
    bla bla bla...
    # Create the Jinja2 Environment
    


OpenStreetMap, Геокодирование и автодополнение адреса в строке поиска (как у гугла) с помощью Яндекс API :)

Геокоди́рование — процесс назначения географических идентификаторов (таких как географические координаты, выраженные в виде широты и долготы) объектам карты и записям данных.
Например, геокодированием является назначение координат записям, описывающим адрес (улица/дом) или фотографиям (где было сделано фото) или IP-адресам, или любой другой информации, имеющей географический компонент. Геокодированные объекты могут быть использованы в


готовим Pylons + WTForms


WTForm простая, но довольно удобная библиотека для создания форм. И еще WTForm очень похожа на формы в Django - одно из немногово что в джанге сделано хорошо. Посмотрим как это работает с Pylons. Для удобства будем хранить формы отдельно
|+config/
|+controllers/
|~forms/
| |~mycontroller/
| | |-__init__.py
| | `-equipments.py
| |+validators/
| `-__init__.py
Создаем форму для редактирования оборудования equipments.py
from myapp.model.meta import Session as s
from myapp.model.mymodel import EquipmentType
from wtforms import Form, TextField, validators
from wtforms.ext.sqlalchem