Пеликан - "article_page" не определено

Я создал свою собственную тему для Pelican и некоторое время использовал ее для создания своего сайта. Я решил начать вести блог снова, поэтому я только сейчас добавляю функции блога на сайт.

Я создал свой собственный blog.html Шаблон для рендеринга контента так, как я хочу. Я начал с копирования и вставки кода из "простой" темы, которая идет в комплекте с Pelican, чтобы начать работу, но даже если она не изменилась, я получаю 'articles_page' is undefined ошибка, когда я пытаюсь построить.

Где article_page переменная установлена ​​из? Я пытался добавить в мой pelicanconf.py файл, но это не помогло.

{% extends 'base.html' %}
{% block title %}{{ page.title }} — Ricky White{% endblock title %}

{% block content %}  

<section class="wrapper">
<div class="container">
    <div class="row">
        <div class="col">
            <ol id="post-list">
                {% for article in articles_page.object_list %}
                    <li><article class="hentry">
                            <header> <h2 class="entry-title"><a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></h2> </header>
                            <footer class="post-info">
                                <time class="published" datetime="{{ article.date.isoformat() }}"> {{ article.locale_date }} </time>
                                <address class="vcard author">By
                                {% for author in article.authors %}
                                    <a class="url fn" href="{{ SITEURL }}/{{ author.url }}">{{ author }}</a>
                                {% endfor %}
                                </address>
                            </footer><!-- /.post-info -->
                            <div class="entry-content"> {{ article.summary }} </div><!-- /.entry-content -->
                    </article></li>
                {% endfor %}
            </ol><!-- /#posts-list -->
            {% if articles_page.has_other_pages() %}
                {% include 'pagination.html' %}
            {% endif %}

        </div>
    </div>
</div>
</section>
{% endblock content %}

4 ответа

Вы, должно быть, ссылались на свой шаблон из одной из статей, используя:

Template: blog

Если вы удалите эту ссылку и добавите следующие строки в файл pelicanconf.py, Pelican сгенерирует blog.html непосредственно из файла шаблона:

DIRECT_TEMPLATES = ['index', 'blog']
PAGINATED_DIRECT_TEMPLATES = ['blog']

(Не забудьте очистить папку вывода перед запуском pelican. Протестировано на Pelican 3.7.1)

Ради будущих посетителей, которые могут прийти сюда в поисках ответа, как я:

У проблемы может быть множество самых разных причин. В моем случае это была не проблема с настройкой инструмента «Пеликан», а скорее ошибка в метаданных некоторых моих информационных страниц. Я не указал правильные поля категории, даты или тега. Вы бы никогда не догадались об этом из сообщения об ошибке, не так ли?

Я нашел этот вопрос в поисках той же ошибки.

В моем случае причина была проблема , которая была закрыта , но не объединена в текущей версии от Attila темы. Точнее: ошибка вызвана шаблоном в templatesпапка темы, в которой есть неправильная ссылка. В конкретном случае внутри page шаблоне была неправильная ссылка на article.

Изменение шаблона вручную устранило проблему:

      --- a/attila-1.3/templates/page.html
+++ b/attila-1.3/templates/page.html
@@ -21,8 +21,8 @@
   {% else %}
     {% set selected_cover = SITEURL+"/"+HEADER_COVER %}
   {% endif %}
-{% elif article.color %}
-  {% set selected_color = article.color %}
+{% elif page.color %}
+  {% set selected_color = page.color %}
 {% elif HEADER_COLOR %}
   {% set selected_color = HEADER_COLOR %}
 {% endif %}

Надеюсь, это поможет отладить похожие ошибки.

Переменная страницы articles_pageустанавливается только в одном месте: Writer._get_localcontextи есть охранное условие:

      if paginated and template_name in self.settings['PAGINATED_TEMPLATES']:
   # ... code ...
   paginated_kwargs.update(
                        {'%s_paginator' % key: paginator,
                         '%s_page' % key: page,                    # <-- Creates `article_page`
                         '%s_previous_page' % key: previous_page,
                         '%s_next_page' % key: next_page})

Если эта проблема возникает, самое простое решение — убедиться, что условие защиты оценивается как True. Скорее всего, проблема в том, что template_nameнет в вашем конфигурационном файле. Я открыл Writers.py, добавил print(f"template_name is {template_name}")и получил мой ответ (у меня не было author : Noneв моем PAGINATED_TEMPLATESтолковый словарь).

Другие вопросы по тегам