Рубрики
Без рубрики

Как создать свой первый статический сайт с помощью Pelican и Jinja2

Узнайте, как создавать статические веб-сайты с помощью Python, генератора статических сайтов Pelican, Jinja2 и Markdown.

Автор оригинала: Matt Makai.

Pelican – это невероятно хорошо созданный инструмент Python для создание статических сайтов.

Полный стек Python создается с помощью Шаблоны Pelican, Jinja2 и Markdown. Этот сайт развернут на Amazon S3 и в настоящее время обслуживает более ста тысяч читателей в месяц. Проблемы с масштабированием никогда не возникают, потому что статический сайт предварительно создается перед развертыванием, и веб-сервер просто отвечает с существующими файлами, а не выполнять какой-либо код на сервере во время цикл HTTP-запрос-ответ.

В этом уроке вы узнаете, как создать свой собственный статический сайт с нуля, используя Пеликан.

Страница статей после добавления Bootstrap CSS.

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

Наши инструменты

Это руководство должно работать с 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 добавит свое имя в командную строку, когда активирован.

Создать и активировать виртуальную среду Python.

После активации 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 в своем Интернете. браузер, и вы увидите первую версию своего статического сайта.

Стиль по умолчанию на статическом сайте Pelican.

Что делать, если в вашей системе не установлен 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

Наш первый пост во всей красе …

Gunship в качестве нашего первого поста о группе на статическом ретро-сайте synthwave.

Вы можете изменить привязку порта 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

Вернитесь в браузер и обновите, чтобы просмотреть обновленную конфигурацию.

Новые ссылки, созданные файлом настроек конфигурации pelicanconf.py.

Что происходит, когда мы нажимаем на заголовок сообщения в блоге? Это приводит нас к очень похожая страница с URL localhost: 8000/gunship.html .

Дополнительная страница Gunship для сайта.

Хорошо, мы обновили некоторые основные данные по всему сайту, но наш сайт действительно может используйте смену краски.

Изменить тему сайта

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

Создайте новый каталог в каталоге вашего проекта с именем тема . В 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 }}
{% endblock %}

Затем мы воспользуемся шаблоном 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 тема.

Страница index.html без применения стилей.

Щелкните заголовок сообщения о боевом корабле. На этой странице используется article.html шаблон, хотя это сложно сказать, потому что нет CSS применен к странице.

Статьи имеют совершенно другую тему, основанную на разметке article.html.

Довольно редко! Мы можем по крайней мере добавить CSS Bootstrap в HTML, чтобы выровняйте наш контент.

В base.html добавьте следующую строку для Bootstrap в {% block title%} {% endblock%} и выше .


Восстановите сайт и обновите страницу Gunship.

Страница статей после добавления Bootstrap CSS.

По крайней мере, наш дизайн переместился с 1996 на 2001. Я уверен, что вы можете сделайте гораздо больше, чтобы улучшить дизайн вашего собственного сайта.

Новый base.html пока не предоставляет большой части темы, но по крайней мере обеспечивает новый старт для полностью настраиваемых сайтов.

Что дальше?

Вы создали свой первый статический веб-сайт Pelican, используя Markdown и Jinja2. Дополнительные модификации могут быть внесены в шаблоны Jinja2 и контент, содержащийся в Markdown файлы.

Вы хотите развернуть свой новый статический веб-сайт на страницах GitHub или в сегменте S3? Что ж, это история для еще одного учебника Full Stack Python ...

Вопросов? Дай мне знать через запрос на выпуск GitHub в репозитории Full Stack Python , в Твиттере @fullstackpython или @mattmakai .

Видите что-то не так в этом сообщении в блоге? Вилка исходный код этой страницы на GitHub и отправьте запрос на перенос.