Pelican – это невероятно хорошо созданный инструмент Python для создание статических сайтов.
Полный стек Python создается с помощью Шаблоны Pelican, Jinja2 и Markdown. Этот сайт развернут на Amazon S3 и в настоящее время обслуживает более ста тысяч читателей в месяц. Проблемы с масштабированием никогда не возникают, потому что статический сайт предварительно создается перед развертыванием, и веб-сервер просто отвечает с существующими файлами, а не выполнять какой-либо код на сервере во время цикл HTTP-запрос-ответ.
В этом уроке вы узнаете, как создать свой собственный статический сайт с нуля, используя Пеликан.
На нашем простом статическом сайте будут страницы, похожие на приведенный выше снимок экрана. но весь сайт можно легко настроить и расширить с помощью собственного дизайна и содержание.
Наши инструменты
Это руководство должно работать с Python 2 или 3, но Python 3 настоятельно рекомендуется для всех новых приложений. я использовал Python 3.6.1 в напишите этот пост. Помимо Python, в этом руководстве мы также будет использовать следующие зависимости приложения:
- Пеликан
- генератор статических сайтов,
- версия 3.7.1
- Библиотека синтаксического анализа Markdown для обработки Markdown как содержимого
- формат ввода, версия
- 2.6.8
- Jinja2, шаблонизатор Python,
- версия 2.9.6
- pip и
- virtualenv , которые входят
- в комплекте с Python 3, чтобы установить и изолировать Pelican, Markdown,
- и библиотеки Jinja2 из других ваших проектов Python
Если вам нужна помощь в получении среда разработки настроена, возьмите смотреть на это руководство по настройке Python 3 и Flask в Ubuntu 16.04 LTS
Весь код в этом сообщении в блоге доступен с открытым исходным кодом по лицензии MIT. на GitHub в разделе Каталог генерации-static-sites-pelican-jinja2-markdown репозитория blog-code-examples . Используйте исходный код и злоупотребляйте им в своих собственных приложениях.
Установите библиотеки Pelican и Markdown
Начните с создания новой виртуальной среды для вашего проекта. Мой виртуальный называется staticsite
, но вы можете назвать свое имя, соответствующее проекту вы создаете.
python3 -m venv staticsite
Активируйте virtualenv.
source staticsite/bin/activate
Virtualenv добавит свое имя в командную строку, когда активирован.
После активации virtualenv установите соответствующие зависимости. Используйте команду pip
для установки Pelican и Markdown, которые также установите Jinja2, потому что Pelican указывает его как зависимость.
pip install pelican==3.7.1 markdown==2.6.8
Запустите команду pip
, и после того, как все будет установлено, вы должны увидеть вывод похожее на следующее сообщение «Успешно установлено».
Installing collected packages: pygments, pytz, six, feedgenerator, blinker, unidecode, MarkupSafe, jinja2, python-dateutil, docutils, pelican, markdown Running setup.py install for feedgenerator ... done Running setup.py install for blinker ... done Running setup.py install for MarkupSafe ... done Running setup.py install for markdown ... done Successfully installed MarkupSafe-1.0 blinker-1.4 docutils-0.13.1 feedgenerator-1.9 jinja2-2.9.6 markdown-2.6.8 pelican-3.7.1 pygments-2.2.0 python-dateutil-2.6.0 pytz-2017.2 six-1.10.0 unidecode-0.4.20
Теперь, когда наши зависимости установлены в virtualenv, мы можем начать создание нашего статического сайта.
Создать базовый сайт
Создайте новый каталог для хранения вашего проекта. Мой сайт будет содержать некоторые из мой любимый ретро-синтвейв художников в качестве примеров, но, конечно, ваш сайт может содержать любые темы что ты хочешь.
После создания перейдите в каталог проекта.
mkdir retrosynth cd retrosynth
Запустите команду pelican-quickstart
в новом каталоге проекта.
(staticsite) $ pelican-quickstart
Скрипт быстрого запуска ответит на кучу вопросов. следить вместе с ответами ниже или измените их для своего собственного имени сайта и желаемая конфигурация.
Welcome to pelican-quickstart v3.7.1. This script will help you create a new Pelican-based website. Please answer the following questions so this script can generate the files needed by Pelican. > Where do you want to create your new web site? [.] > What will be the title of this web site? RetroSynthwave > Who will be the author of this web site? Matt Makai > What will be the default language of this web site? [en] > Do you want to specify a URL prefix? e.g., http://example.com (Y/n) n > Do you want to enable article pagination? (Y/n) n > What is your time zone? [Europe/Paris] America/New_York > Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n)y > Do you want an auto-reload & simpleHTTP script to assist with theme and site development? (Y/n) y > Do you want to upload your website using FTP? (y/N) n > Do you want to upload your website using SSH? (y/N) n > Do you want to upload your website using Dropbox? (y/N) n > Do you want to upload your website using S3? (y/N) y > What is the name of your S3 bucket? [my_s3_bucket] > Do you want to upload your website using Rackspace Cloud Files? (y/N) n > Do you want to upload your website using GitHub Pages? (y/N) n Done. Your new project is available at /Users/matt/devel/py/retrosynth (staticsite) $
Что мы только что создали с помощью сценария быстрого запуска Пеликана? Проверять, выписываться новые файлы в каталоге.
(staticsite) $ ls Makefile develop_server.sh pelicanconf.py content fabfile.py publishconf.py
При быстром запуске было создано пять файлов и один новый каталог:
Makefile
: удобные задачи командыmake
для общих операций, таких как- запуск сервера разработки, создание сайта и очистка постороннего
- файлы сборки
fabfile.py
: файл Fabric , содержащий некоторые из- те же типы команд, что и
Makefile
. Ткань – прекрасный код - библиотека, но пока я рекомендую пропустить файл Fabric, потому что
- к сожалению, Fabric еще не поддерживает Python 3.
develop_server.sh
: сценарий оболочки для запуска сервера разработкиpelicanconf.py
: файл настроек для вашего проекта Pelican. Если тебя используют- в более ранних версиях Пеликана этот файл назывался
settings.py
publishconf.py
: еще один (необязательный) файл настроек, который можно рассмотреть- как “производственный” файл настроек, когда вы переходите из стадии разработки
- и хотите развернуть свой сайт
content
: расположение файлов разметки, которые следует хранить в- каталоги
pages
иposts
Мы можем использовать эти файлы в качестве основы для нашего нового статического сайта. Посмотрим что это выглядит по умолчанию, если запустить его через задачу devserver
в Makefile.
make devserver
Сервер разработки Pelican начнет обслуживать ваш сайт с демон процесс. Перейдите к localhost: 8000 в своем Интернете. браузер, и вы увидите первую версию своего статического сайта.
Что делать, если в вашей системе не установлен make
? Перейти в output
и используйте команду python -m http.server
для использования встроенный HTTP-сервер Python 3 для ваших сгенерированных файлов.
Если вы хотите убить сервер разработки, найдите файл с именем pelican.pid
в каталоге вашего проекта. Файл pelican.pid
создан. от Pelican и содержит идентификатор процесса для вашего сервера разработки.
(staticsite) $ cat pelican.pid 1365
Используйте команды ps
и grep
для просмотра процесса, а затем остановите его. с помощью команды kill
, как показано ниже. Помните, что ваш идентификатор процесса почти определенно отличаться от идентификатора 1365
для моего процесса.
Убейте сервер разработки сейчас, чтобы мы могли использовать разные команды для обслуживать наш сайт после того, как мы создадим наш первоначальный контент.
(staticsite) $ ps -A | grep 1365 1365 ttys003 0:01.43 /Library/Frameworks/Python.framework/Versions/3.6/Resources/Python.app/Contents/MacOS/Python /Users/matt/Envs/staticsite/bin/pelican --debug --autoreload -r /Users/matt/devel/py/retrosynth/content -o /Users/matt/devel/py/retrosynth/output -s /Users/matt/devel/py/retrosynth/pelicanconf.py 1411 ttys003 0:00.00 grep 1365 (staticsite) $ kill 1365 (staticsite) $ ps -A | grep 1365 1413 ttys003 0:00.00 grep 1365
Вам решать, хотите ли вы использовать сервер разработки или нет. при создании вашего сайта. Каждый раз, когда я хочу просмотреть свои изменения для Полный стек Python Я регенерирую сайт, используя свой собственный Makefile, который оборачивает команду пеликан
. Команда python -m http.server
постоянно обслуживает изменения каждой сборки.
Хорошо, теперь, когда у нас есть начальные файлы, мы можем приступить к созданию некоторый исходный контент.
Напишите контент
Пеликан может принимать как Markdown, так и reStructureText. файлы разметки как входные.
Создайте новый подкаталог в content
с именем posts
. Изменить на каталог posts
. Создайте новый файл с именем gunship.markdown
с следующее содержание.
title: Gunship slug: gunship category: bands date: 2017-06-09 modified: 2017-06-09 [Gunship](https://www.gunshipmusic.com/) is a *retro synthwave* artist out of the UK. [Revel in Your Time](https://www.youtube.com/watch?v=uYRZV8dV10w), [Tech Noir](https://www.youtube.com/watch?v=-nC5TBv3sfU), [Fly for Your Life](https://www.youtube.com/watch?v=Jv1ZN8c4_Gs) and [The Mountain](https://www.youtube.com/watch?v=-HYRTJr8EyA) are all quality songs by Gunship. Check out those amazing music videos! Also take a look at other retro synthwave artists such as [Trevor Something](https://trevorsomething.bandcamp.com/), [Droid Bishop](https://droidbishop.bandcamp.com/), [FM-84](https://fm84.bandcamp.com/) and [Daniel Deluxe](https://danieldeluxe.bandcamp.com/).
Наш файл make
также может помочь нам восстановить сайт при внесении изменений. если мы решим не использовать сервер разработки.
Ранее мы использовали задачу devserver
, но какие еще задачи доступны нам через Makefile
?
make
make
должен показать нам все следующие задачи, которые мы можем выполнить.
Makefile for a pelican Web site Usage: make html (re)generate the web site make clean remove the generated files make regenerate regenerate files upon modification make publish generate using production settings make serve [PORT=8000] serve site at http://localhost:8000 make serve-global [SERVER=0.0.0.0] serve (as root) to :80 make devserver [PORT=8000] start/restart develop_server.sh make stopserver stop local server make ssh_upload upload the web site via SSH make rsync_upload upload the web site via rsync+ssh make dropbox_upload upload the web site via Dropbox make ftp_upload upload the web site via FTP make s3_upload upload the web site via S3 make cf_upload upload the web site via Cloud Files make github upload the web site via gh-pages Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html Set the RELATIVE variable to 1 to enable relative urls
Задача html
– это то, что мы ищем для вызова команды pelican
используя наш файл настроек pelicanconf.py
.
(staticsite) $ make html pelican /Users/matt/devel/py/retrosynth/content -o /Users/matt/devel/py/retrosynth/output -s /Users/matt/devel/py/retrosynth/pelicanconf.py Done: Processed 1 article, 0 drafts, 0 pages and 0 hidden pages in 0.14 seconds.
Наш сайт был регенерирован и помещен в каталог output
.
Если вы использовали команду make devserver
ранее, перейдите в output
каталог и дайте возможность встроенному HTTP-серверу Python с помощью следующих команда.
cd output python -m http.server
Наш первый пост во всей красе …
Вы можете изменить привязку порта HTTP-сервера, добавив число после команда, если вы хотите обслуживать более одного статического сайта одновременно или вы у вас уже есть приложение, привязанное к порту 8000.
python -m http.server 8005
Обратите внимание, что если вы используете Python 2, эквивалентная команда HTTP-сервера python -m SimpleHTTPServer
.
На нашем сайте теперь есть очень простой контент. Мы могли бы расширить это начало до еще много сообщений и страниц, но давайте узнаем, как изменить сайт конфигурация.
Изменить конфигурацию сайта
Быстрый старт Пеликана предполагал множество значений по умолчанию, которые могут или не могут быть применимо к вашему сайту. Откройте файл pelicanconf.py
, чтобы изменить некоторые значений по умолчанию.
Найдите переменную TIMEZONE
. Если это не подходит для вашего местоположения затем измените его на свою зону. В Википедии есть удобный таблица допустимых значений часовых поясов .
Также измените кортеж LINKS
, чтобы включить ваш сайт (или полный стек Python!) вместо ссылки «вы можете изменить эти ссылки». Изменить последняя строка LINKS
, чтобы она выглядела как следующий кортеж кортежей.
# Blogroll LINKS = (('Pelican', 'http://getpelican.com/'), ('Python.org', 'http://python.org/'), ('Jinja2', 'http://jinja.pocoo.org/'), ('Full Stack Python', 'https://www.fullstackpython.com/'),)
Вместо использования файла make html
на этот раз мы вызовем pelican
прямо из командной строки. Нет ничего плохого с помощью Makefile
, но лучше освоиться с Пеликаном напрямую, а не только через файлы сборки.
pelican -s pelicanconf.py -o output content
Теперь запустите HTTP-сервер, если он еще не запущен в другом окно терминала.
cd output python -m http.server
Вернитесь в браузер и обновите, чтобы просмотреть обновленную конфигурацию.
Что происходит, когда мы нажимаем на заголовок сообщения в блоге? Это приводит нас к очень похожая страница с URL localhost: 8000/gunship.html .
Хорошо, мы обновили некоторые основные данные по всему сайту, но наш сайт действительно может используйте смену краски.
Изменить тему сайта
Изменив тему сайта, вы действительно можете превратить стандартный блог в какой бы тип сайта вы ни хотели создать. Хотя по умолчанию Пеликан конфигурация создает шаблон блога, вам не нужно иметь хронологическая структура, если она не подходит для вашего сайта.
Создайте новый каталог в каталоге вашего проекта с именем тема
. В theme
создайте другой каталог с именем templates
. templates
– это то место, где будут храниться наши шаблоны Jinja2 и может переопределить тему по умолчанию.
Начните с создания файла с именем base.html
, в котором будет храниться шаблон используется шаблонами на сайте.
{% block title %}{% endblock %}
В theme/templates
создайте файл с именем article.html
, который будет иметь тема для сообщений блога отличается от темы остального сайта. Заполните article.html
со следующей разметкой Jinja2.
{% extends "base.html" %} {% block title %}{{ article.title }}{% endblock %} {% block content %}{{ article.title }} {{ article.content }}
Затем мы воспользуемся шаблоном Jinja2, чтобы переопределить значение по умолчанию index.html
main страница. Снова в каталоге theme/templates
создайте файл с именем index.html
со следующей разметкой.
{% extends "base.html" %} {% block title %}{{ SITENAME }}{% endblock %} {% block content %}{{ SITENAME }} {% for article in articles %}
pelican -s pelicanconf.py -o output -t theme contentПерейдите на localhost: 8000 и обновите страницу. Стиль на главной странице теперь другой, потому что он использует
index.html
тема.Щелкните заголовок сообщения о боевом корабле. На этой странице используется
article.html
шаблон, хотя это сложно сказать, потому что нет CSS применен к странице.Довольно редко! Мы можем по крайней мере добавить CSS Bootstrap в HTML, чтобы выровняйте наш контент.
В
base.html
добавьте следующую строку для Bootstrap ви выше
{% block title%} {% endblock%} .
Восстановите сайт и обновите страницу Gunship.
По крайней мере, наш дизайн переместился с 1996 на 2001. Я уверен, что вы можете сделайте гораздо больше, чтобы улучшить дизайн вашего собственного сайта.
Новый
base.html
пока не предоставляет большой части темы, но по крайней мере обеспечивает новый старт для полностью настраиваемых сайтов.Что дальше?
Вы создали свой первый статический веб-сайт Pelican, используя Markdown и Jinja2. Дополнительные модификации могут быть внесены в шаблоны Jinja2 и контент, содержащийся в Markdown файлы.
Вы хотите развернуть свой новый статический веб-сайт на страницах GitHub или в сегменте S3? Что ж, это история для еще одного учебника Full Stack Python ...
Вопросов? Дай мне знать через запрос на выпуск GitHub в репозитории Full Stack Python , в Твиттере @fullstackpython или @mattmakai .
Видите что-то не так в этом сообщении в блоге? Вилка исходный код этой страницы на GitHub и отправьте запрос на перенос.