У объекта 'str' нет атрибута '_meta' ошибка при настройке django-comments-xtd согласно документации - PullRequest
0 голосов
/ 28 июня 2018

Мой сайт на самом деле сайт трясогузки, хотя я не уверен, что это имеет значение. Это простое приложение для блогов со страницей блога для просмотра сообщений и страницей для отображения каждого сообщения.

Я следовал инструкциям здесь , чтобы настроить django-comments-xtd

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

{% get_comment_count for object as comment_count %}
<div class="text-center" style="padding-top:20px">
  <a href="{% url 'blog:post-list' %}">Back to the post list</a>
  &nbsp;&sdot;&nbsp;
  {{ comment_count }} comments have been posted.
</div>

Я изменил фактическую ссылку, чтобы она была следующей, так как она была на моем сайте (построена из другого учебника)

<p><a href="{{ page.get_parent.url }}">Return to blog</a></p>

Не думаю, что изменение URL-адреса могло бы вызвать проблему, насколько я могу судить. Я также загрузил комментарии в начале файла.

Фактическая ошибка:

Error during template rendering

In template /home/jake/blog/blog/post_page.html, error at line 8
'str' object has no attribute '_meta'

Строка 8 относится к этой строке:

{% get_comment_count for object as comment_count %}

Может ли кто-нибудь объяснить эту ошибку более подробно?

1 Ответ

0 голосов
/ 29 июня 2018

Django django-comments-xtd хранит комментарии к объектам. В вашем случае объект является страницей трясогузки. Изменения:

{% get_comment_count for object as comment_count %}

Кому:

{% get_comment_count for page as comment_count %}

Переменная object представляет собой пустую строку ''. Это демонстрация того, что происходит где-то в коде django-comments-xtd:

>>> ''._meta
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute '_meta'

Страница трясогузки - это и модель, и вид. Когда URL-адрес разрешен, вызывается Page.serve . Это вызывает get_context и возвращает dict.

{'page': self, 'self': self, 'request': request}

Контекст - все переменные и их значения - используется для заполнения шаблона. Там нет object в контексте!

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

Когда документация показывает пример кода и упоминает {{ object }} или obj, они означают «объект». Любой объект (Пицца, Автомобили, Вопросы). Ваш объект Объектом по умолчанию в Wagtail является объект Page. Вы должны использовать переменную страницы.

...