Категории

Язык
Окружение
Проект
Циклы статей

13 июля 2018 г. 13:19 (ред. 16 июля 2018 г. 9:46)
О том, как реализовать выдачу Турбо-страниц в вашем проекте на Django.
Турбо-страницы — это лёгкие версии страниц вашего сайта, хранимые на серверах Яндекса. За счёт своей лёгкости, а также хорошей доступности серверов, такие страницы быстро грузятся даже на медленных соединениях, например, 3G.

Чтобы показать Яндексу, что у вашего сайта есть турбо-версии страниц, можно создать RSS-канал (оформленный по определённым правилам) и зарегистрировать его в Вебмастере.

В Django уже есть инструменты для создания RSS-каналов, но из коробки их использовать для Турбо-страниц не получится, придётся подкручивать. Чтобы вам (и мне) впредь этого не делать, на днях я создал django-yaturbo. Более того, я уже успел включить это приложение на pythonz.net, и у страницы, которую вы сейчас читаете, теперь тоже есть турбо-версия.

Давайте посмотрим, как подключить django-yaturbo.

Здесь всё очень похоже на классическое подключение RSS-канала в Джанго.
Для начала наследуем класс нашего канала от YandexTurboFeed:

    from yaturbo import YandexTurboFeed

class TurboFeed(YandexTurboFeed):

turbo_sanitize = True

def items(self):
return Article.objects.all()

def item_turbo(self, article):
# Представим, что в атрибуте article.html содержится код страницы.
# Ввиду того, что мы проставили выше turbo_sanitize = True
# наш HTML будет санирован - теги и атрибуты, не поддерживаемые
# Турбо-страницами, будут автоматически удалены.
# Это, конечно не то же самое, что сверстать специальную Турбо-страницу,
# но в ряде случаев и этого достаточно.
return article.html

По большому счёту, дополнительно к определениям, требующимся для настройки канала, достаточно будет лишь определить метод .item_turbo(), возвращающий HTML лёгкой страницы.

Подлючается канал тоже классическим способом.
Создаём экземпляр [опционально его настраиваем] и цепляем к urlpatterns в urls.py:

    from .feeds import TurboFeed

feed = TurboFeed()

# Можно тут же указать номер счётчика Яндекс.Метрики.
feed.configure_analytics_yandex('123456789')

# И тут же данные блока рекламной сети Яндекса,
# если планируете показывать на страницах рекламу.
feed.configure_ad_yandex('A-123')

urlpatterns = [
...
path('feeds/turbo/', feed),
...
]

Этого, пожалуй, должно хватить для запуска Турбо-страниц в вашем проекте.
Обратите внимание, что есть требования к оформлению содержимого страниц, которые нужно выполнять.

Пользуйтесь.
django-yaturbo разрабатывается открыто, можете принимать участие.

Быстрее, выше, сильнее!