Ваша домашняя страница, файл index.html
, является просто еще одним шаблоном из списка DIRECT_TEMPLATES
.Это будет зависеть от вашей темы, как именно она будет сгенерирована, но вы всегда можете переопределить определенные шаблоны локально, или , вы можете создать новый шаблон для вашей домашней страницы, чтобы заменить его (и при необходимости перенаправить исходный index.html
сгенерированная страница в другом месте).
В любом случае, вы можете сгенерировать раздел, который показывает статьи из одной категории.Все страницы шаблона имеют одинаковые основные переменные , которые включают в себя список articles
, а также список categories
с (Category, list_of_articles)
кортежами.
Самый простой способ получить всестатьи для одной конкретной категории - это фильтрация списка articles
напрямую с помощью фильтра Jinja2 selectattr
.selectattr('category', '==', categoryname)
сопоставляется как с именем категории, так и слизнем (все, что вы установили для categoryname
, преобразуется в слаг).Так что если ваша категория называется News
, то оба 'News'
или 'news'
работают:
<h2>News:</h2>
<ol id="posts-list" class="hfeed">
{% for article in articles | selectattr('category', '==', 'news') %}
<li><article class="hentry">
<header>
<h1><a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark"
title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></h1>
</header>
<div class="entry-content">
{% include 'article_infos.html' %}
{{ article.summary }}
<a class="readmore" href="{{ SITEURL }}/{{ article.url }}">read more</a>
{% include 'comments.html' %}
</div><!-- /.entry-content -->
</article></li>
{% endfor %}
</ol>
Вышеприведенное повторное использование простой разметки статьи темы.Вы можете ограничить количество новостных статей;в этом случае используйте фильтр batch(size)
вместе с first
:
<h2>News:</h2>
<ol id="posts-list" class="hfeed">
{% for article in articles | selectattr('category', '==', 'news') | batch(5) | first %}
<!-- render article, etc. -->
В приведенном выше примере рассматриваются первые 5 статей с News
в качестве категории.
Поскольку базовая тема повторно использует шаблон index.html
для всех отдельных страниц архива (для каждой категории, автора или страницы тега), я бы не стал переопределять index
Прямой шаблон здесь.Вместо этого я бы создал новый homepage
шаблон (в каталоге страниц) и записал бы его в index.html
и.Вам необходимо добавить шаблон в словарь TEMPLATE_PAGES
, где страницы шаблона должны находиться в отдельном каталоге, который не должен рассматриваться как статьи или страницы.
Создать новыйкаталог для шаблонов страниц в вашем каталоге содержимого;вам нужно убедиться, что Pelican не пытается рассматривать файлы там как статьи, поэтому добавьте его в список ARTICLE_EXCLUDES
.Поэтому, если весь ваш Pelican ваш контент живет в content/
, а у вас есть файл homepage.html
в каталоге output/templates/
, вы будете использовать:
ARTICLE_EXCLUDES = ['templates']
TEMPLATE_PAGES = {
'templates/homepage.html': 'index.html',
}
Это перезапишет значение по умолчанию index.html
Сгенерировано для статей, нет необходимости удалять что-либо из DIRECT_TEMPLATES
, но вы можете сделать это, чтобы избежать создания файла, который вы никогда не сохраните.
Шаблон homepage.html
может в полной мере использовать любые существующие шаблоны втема, так что вы можете просто расширить base.html
, что определит большинство тем:
{% extends "base.html" %}
{% block content %}
<section id="content">
<h2>Recent news:</h2>
<ol>
{% for article in articles | selectattr('category', 'equalto', 'news') | batch(5) | first %}
<!-- markup for each news item -->
{% endfor %}
</ol>
</section><!-- /#content -->
{% endblock content %}
Вместо перезаписи по умолчанию index
, вы также можете установить INDEX_SAVE_AS
для прямогооригинальный файл index.html
в другом месте:
ARTICLE_EXCLUDES = ['templates']
TEMPLATE_PAGES = {
'pages/homepage.html': 'index.html',
}
# move the original article index elsewhere:
INDEX_SAVE_AS = 'all_articles.html'
Если вы используете тему, которая не использует шаблон index.html
для большего количества страниц, или вы все равно хотите попытаться заставить шаблон работать в этих контекстах, тогда вы можете переопределить шаблон, используемый для index
.Чтобы переопределить значение по умолчанию index.html
в вашей теме, создайте локальный каталог (возможно, overrides
), в который поместите локальную версию, затем добавьте этот каталог в список THEME_TEMPLATES_OVERRIDES
в вашей конфигурации:
THEME_TEMPLATES_OVERRIDES = ['overrides']
Теперь, когда Pelican пытается загрузить шаблон index.html
, чтобы отобразить шаблон index
direct, он сначала будет искать overrides/index.html
.Так что в overrides/
добавьте свои index.html
:
{% extends "base.html" %}
{% block content %}
<section id="content">
<!-- put your desired content here -->
</section><!-- /#content -->
{% endblock content %}
Слово о нумерации страниц: все шаблоны, кроме специальных страниц, относящихся к архиву (категории, авторы, теги, периоды),разбитый на страницы в полном списке articles
, он не подлежит дальнейшей настройке.Это означает, что вы не можете разбить домашнюю страницу на страницы для отдельной категории статей.
Это означает, что если вы переопределите шаблон index.html
и удалили полный список статей, вы можете удалить index
изсловарь PAGINATED_TEMPLATES
, поэтому он не генерируется повторно несколько раз, чтобы соответствовать вашему списку статей.