Вставка рекламы в статьи сайта на Flask
Большинство информационных сайтов монетизируется показом рекламы, скрипты которой встраивают в html-код страниц. Поскольку во фреймворке Flask используются шаблоны, в один из них можно просто добавить код рекламы, и тогда она будет показывалась на всех страницах, которые генерируются на базе этого шаблона или наследующих от него.
Так, касаемо нашего проекта, если вам не нужна реклама на главной странице, код можно поместить только в page.html. От родительского base.html наследует также create.html, но на страницах редактирования реклама не нужна.
Однако скрипты рекламы состоят из нескольких частей. Общий код загрузчика рекламы обычно помещают внутри html-контейнера head
, а код рекламных блоков ‒ в определенные места страницы. Самый простой вариант ‒ над/под заголовком статьи и/или в конце статьи.
В нашем случае контейнера head
нет в page.html. Он наследуется от base.html. Поэтому загрузчик рекламы придется либо размещать в родительском шаблоне, либо вводить в него дополнительный jinja-блок и уже в page.html добавлять код загрузчика.
Шаблон base.html:
{% block ads_loader %}{% endblock %} </head>
Шаблон page.html (пример с кодом рекламной сети Яндекса):
{% block ads_loader %} <!-- Yandex.RTB --> <script>window.yaContextCb=window.yaContextCb||[]</script> <script src="https://yandex.ru/ads/system/context.js" async></script> {% endblock %}
Что касается самих блоков рекламы, то их код можно вставить как есть. Или поместить в отдельные файлы и, используя команду include
, включить в шаблон по аналогии с тем, как это было сделано для меню сайта. Загрузчик также можно было бы поместить в файл.
Добавлять рекламный блок где-либо внутри статьи (в середине, после первого абзаца) можно "вручную". Так, если статья редактируется в форме или в файле, то в место между абзацами, где вы хотите, чтобы была реклама, можно вставить что-то вроде {% include 'ads/mid.html' %}
. Такой подход дает гибкость, в каждой статье у блока будет свое место, согласующееся с содержанием статьи. Недостаток отсутствия автоматизации не будет иметь большого значения, если сайт состоит из небольшого количества страниц.
С другой стороны, можно дополнить flask-приложение кодом, который после определенного количество абзацев (отсчитает от начала открывающие или закрывающие теги p
) будет вставлять рекламу автоматически. Например, вы получаете результат render_template()
и, перед тем как вернуть его из функции-представления, передаете функции, реализующей добавление рекламы.
Можно пойти дальше, одновременно получив и гибкость, и автоматизм. У каждой статьи в базе данных может быть еще одно поле, обозначающее номер абзаца, перед/после которого будет вставляться реклама. Реализующая вставку функция должна принимать уже два аргумента ‒ строку (html-код страницы) и номер абзаца.
Обычно при просмотре сайта на локальном компьютере (на любом домене, который не подключен к рекламной сети, или "чужой" для данных рекламных блоков) вы не увидите рекламы. Вместо нее будет пустота размером с блок, или он просто схлопнется (как-будто блока нет). Поэтому особого смысла в выполнении рекламных скриптов при разработке сайта нет.
Чтобы добавлять/убирать рекламу, можно ввести дополнительную переменную в начало кода flask-приложения.
ads_work = False # или True, чтобы включить рекламу
Передавать ее значение в шаблон (например, через глобальное окружение jinja).
app.jinja_env.globals.update(get_sections=get_sections, ads_work=ads_work)
В шаблоне обрамить вставки рекламы в условный оператор.
Если говорить о случае, когда flask-приложение параллельно генерирует статическую версию сайта, можно реализовать вставку рекламы на уровне формирования готовых страниц HTML. При этом шаблоны оставить неизменными, "добавляя" весь рекламный код в результат рендера шаблона.
Таким образом, вставка рекламы на страницы сайта может быть выполнено разными способами, в зависимости от ваших задач и особенностей web-приложения.