- PVSM.RU - https://www.pvsm.ru -

Если есть воробей, то зачем нужна пушка. Статические сайты. Обратите внимание на генератор Nikola и на поиск без динамики на серверной стороне средствами AJAX с библиотекой Tipue

Введение

К технологиям, на базе которых функционируют сайты, довольно часто применимо определение «из пушки да по воробьям». Ну вот скажите, пожалуйста, зачем подавляющему большинству сайтов-визиток фирм (а таких ой как много), обновляемых раз в год и не предоставляющими никакой обратной связи с посетителями, хранить свои 15 страничек в базе данных?

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

Более того, как оказалось, народ усиленно думает в сторону статических сайтов и существует готовые инструменты для подключения к таким сайтам динамических компонент, реализуемых третьими сервисами, разумеется посредством AJAX — это и комментирование и поиск и пр…

И пишут на эту тему много. Вот, к примеру, можно почитать:

http://habrahabr.ru/post/93499/ [1]
http://habrahabr.ru/post/142287/ [2]
http://habrahabr.ru/post/160431/ [3]
http://lifehacker.ru/2012/01/12/blogs-at-dropbox/ [4]

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

Это небольшое введение на «быстро-быстро попробовать» развитый генератор статических сайтов Nikola, мало описанный в РуНете.

Общая идея

Для тех, кто не сталкивался с модными нынче генераторами статических сайтов, рассказываю общий принцип работы с большинством таких генераторов:

1. Изначально автор сайта размещает будущие публикации (статьи, посты) в определенных каталогах в обычных текстовых файлах.
2. Шаблоны страниц сайта — лежат отдельно.
3. В отдельных текстовых файлах или внутри самих файлов публикаций размещаются дополнительные «метаданные», например, категоризация (тегирование) публикаций и т.п.
4. Запускается программа-генератор, которая из всего этого создает набор html-ек, css-ек и, иногда, js-ек.
5. Запускаются дополнительные средства автоматизации, которые публикуют полученный сайт. Ну или вручную.

Таким образом, в отличие от полностью статического сайта в html, который очень неудобно править, автор сайта имеет дело с заготовками, удобными в работе — тексты отдельно и шаблоны отдельно.

Для полного счастия разработчиков сайтов, подобных «сайтам-визиткам», ко всему этому можно добавить простенький он-лайн редактор файлов из пункта 1 и 3, выполняющего функции панели управления CMS для конечного заказчика. Вот тут мои поиски в интернете не очень продуктивны. Кто знает подобные он-лайн редакторы исходных файлов данных (публикаций, статей, постов) для генераторов статических сайтов — накидайте инфу в комментах, пожалуйста.

Nikola и Tipue

Многообразие генераторов статических сайтов несколько мейнстримовое: самые популярные своей известностью сместили фокус интереса пользователей с довольно интересных малораскрученных. Хочу обратить внимание читателей РуНета на генератор Nikola [5]. Довольно развитое программное обеспечение, расширяемое, хорошо документированное. Развитое средство — с возможностью подключения плугинов. Реализован на Python.

Одна из самых интересных особенностей генератора Nikola — умение создавать странички с механизмом поиска без движка на серверной стороне — поиск реализован в браузере. Реализуется AJAX'ом средствами Tipue [6]

На этом для опытных, не ленивых и знающих английский на базовом уровне айтишников можно и завершить изложение. Ссылки даны — сами разберетесь. Все ниже описанное легко находится в документации Nikola. Ну а если ленитесь читать оригинал, то, как попробовать, описано ниже.

Как попробовать

Внимание! Все ниже приведенное проверялось с Python 2.7, не Python 3.

Устанавливаем программное обеспечение с помощью менеджера пакетов Python. Я использую pip. Наверняка можно и через easy_install:


pip install nikola

Если это делать под *nix, то те зависимости, которые требуют компиляции, скорее всего, будут скомпилированы нормально. Ну а под Windows, так как мало кто ставит и настраивает необходимое для компиляции некоторых расширений ПО, скорее всего, будет ругань вида:


running build_ext

building 'PIL._imaging' extension

error: Unable to find vcvarsall.bat

Такие зависимости проще установить в бинарном виде, взяв версию соответствующую 32/64-битную и соответствующую вашей версии Python, с сайтов:

http://effbot.org/downloads/ [7]
http://www.lfd.uci.edu/~gohlke/pythonlibs/ [8]

Алгоритм для ленивых таков — запустили установку через «pip install ...», почитали на чем споткнулось, установили из бинарников то, на чем споткнулись, запустили установку через «pip install ...» еще раз и так далее.

После того как генератор Nikola с зависимости был установлен с его помощью создаем заготовку с демонстрационными данными:


nikola init --demo mysite

После чего в каталоге «mysite» можно будет править текстовые файлы, из которых отдельной командой позже будет создан наш сайт.

Про подключение к статическому сайту комментирования внешними сервисами описывать не буду — этим только ленивый не занимался в РуНете. А вот подключение к статическому сайту поиска средствами AJAX без использования каких-либо внешних сервисов или какого-либо движка на своем сервере — это, на мой взгляд, встречается пока что редко, потому более интересно.

Включим поиск по технологии AJAX. Для этого нужно в файле «conf.py», расположенном в корне каталога «mysite», найти и раскомментировать строки (легко находятся по первому вхождению слова «Tipue» внутри файла «conf.py»):

SEARCH_FORM = """
 <span class="navbar-form pull-left">
 <input type="text" id="tipue_search_input">
 </span>"""

BODY_END = """
 <script type="text/javascript" src="/assets/js/tipuesearch_set.js"></script>
 <script type="text/javascript" src="/assets/js/tipuesearch.js"></script>
 <script type="text/javascript">
 $(document).ready(function() {
    $('#tipue_search_input').tipuesearch({
        'mode': 'json',
        'contentLocation': '/assets/js/tipuesearch_content.json',
        'showUrl': false
    });
 });
 </script>
 """

EXTRA_HEAD_DATA = """
 <link rel="stylesheet" type="text/css" href="/assets/css/tipuesearch.css">
 <div id="tipue_search_content" style="margin-left: auto; margin-right: auto; padding: 20px;"></div>
 """
ENABLED_EXTRAS = ['local_search']

Затем генерируем сайт, запустив Nikola так, чтобы каталог «mysite» был бы текущим (то есть изнутри каталога «mysite»):


nikola build

В подкаталоге «output» видим наш статический сайт.
Чтобы нормально работал поиск по технологии AJAX необходимо просматривать сайт через веб-сервер. Для тестирования можно воспользоваться самим генератором Nikola как веб-сервером:


nikola serve

После чего сайт будет доступен по адресу http://127.0.0.1:8000 [9]

Формат исходных данных

Отдельного упоминания стоит формат исходных текстовых файлов. Он пишется с использованием облегченного языка разметки ReStructuredText [10]. Дополнительная информация (метаданные) по публикации (статье, посте) помещаются прямо в текст:

.. title: Welcome to Nikola
.. slug: welcome-to-nikola
.. date: 2012/03/30 23:00
.. tags: nikola, python, demo, blog
.. link: http://getnikola.com
.. description:

.. figure:: http://farm1.staticflickr.com/138/352972944_4f9d568680.jpg
   :target: http://farm1.staticflickr.com/138/352972944_4f9d568680_z.jpg?zz=1
   :class: thumbnail
   :alt: Nikola Tesla Corner by nicwest, on Flickr

If you can see this in a web browser, it means you have managed to install Nikola,
and build a site using it. Congratulations!

* You can read the manual `here </stories/handbook.html>`__
* You can learn more about Nikola at http://getnikola.com
* You can see a demo photo gallery `here </galleries/demo/index.html>`__
* Demo usage of listings `here </stories/listings-demo.html>`__
* Demo of slideshows `here </stories/slides-demo.html>`__
* Demo of Bootstrap `here </stories/bootstrap-demo.html>`__

Send feedback to ralsina@netmanagers.com.ar!

Кроме «ReStructuredText» может быть использована разметка с использованием «bbcode», «wiki», «markdown», «html», «txt2tags» и «textile».

Генератор статических сайтов Nikola — развитая и хорошо документированная система

В генераторе Nikola предусмотрено подключение мультимедиа из Vimeo, Youtube, пр…
Предусмотрены тизеры и черновики.
Предусмотрена галерея изображений.
Предусмотрено изменение внешнего вида (темы), созданию которых на официальном сайте посвящено довольно много документации, есть десяток готовых тем.
Предусмотрено написание подключаемых модулей для расширения функциональности (plugins).

За хорошо написанную и подробную документацию отдельное спасибо разработчику — Roberto Alsina.

Автор: denisgorbunov

Источник [11]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/46219

Ссылки в тексте:

[1] http://habrahabr.ru/post/93499/: http://habrahabr.ru/post/93499/

[2] http://habrahabr.ru/post/142287/: http://habrahabr.ru/post/142287/

[3] http://habrahabr.ru/post/160431/: http://habrahabr.ru/post/160431/

[4] http://lifehacker.ru/2012/01/12/blogs-at-dropbox/: http://lifehacker.ru/2012/01/12/blogs-at-dropbox/

[5] Nikola: http://getnikola.com/

[6] Tipue: http://www.tipue.com/

[7] http://effbot.org/downloads/: http://effbot.org/downloads/

[8] http://www.lfd.uci.edu/~gohlke/pythonlibs/: http://www.lfd.uci.edu/~gohlke/pythonlibs/

[9] http://127.0.0.1:8000: http://127.0.0.1:8000

[10] облегченного языка разметки ReStructuredText: http://ru.wikipedia.org/wiki/ReStructuredText

[11] Источник: http://habrahabr.ru/post/198342/