【发布时间】:2023-04-09 12:45:01
【问题描述】:
我的网站实际上是一个 wagtail 网站,尽管我不确定这是否会有所不同。这是一个简单的博客应用程序,其中包含一个用于查看帖子的博客页面和一个用于显示每个帖子的页面。
我按照here 的说明设置 django-cmets-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>
⋅
{{ comment_count }} comments have been posted.
</div>
我将实际链接更改为以下内容,因为这就是我网站中的内容(根据另一个教程构建)
<p><a href="{{ page.get_parent.url }}">Return to blog</a></p>
据我所知,我认为这样更改网址不会导致问题。我还确保在文件开头加载 cmets。
实际错误是:
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 %}
谁能更详细地解释这个错误?
【问题讨论】:
-
object是什么?我猜是一个空字符串''。如果您打开 Python 并执行>>> ''._meta,则会收到错误AttributeError: 'str' object has no attribute '_meta'。难道是 django-cmets-xtd 保持每页的评论数?例如:{% get_comment_count for page as comment_count %} -
将对象更改为页面有效!这对我来说似乎很奇怪。为什么文档会告诉您输入会返回错误的代码?是否可能与使用 wagtail 有关?
-
Django 模板允许未定义变量。空变量不会引发错误。这个概念很有用。当上下文不提供变量时,它将默认为空字符串。在基于 Django 类的视图和大多数 Django 文档中使用
{{ object }}或obj。因为obj可以是任何对象(披萨、汽车、问题)。 Wagtail 中的默认对象是 Page 对象。page变量名选择得很好。我想真正的问题是你不知道上下文:所有用于填充模板的变量及其值。 -
Wagtail 页面既是模型又是视图。当一个 url 被解析时 Page.serve 被调用 github.com/wagtail/wagtail/blob/master/wagtail/core/… 调用
get_context它返回一个字典。{'page': self, 'self': self, 'request': request}。见github.com/wagtail/wagtail/blob/master/wagtail/core/…。上下文中没有object! django-cmets-xtd 开发人员刚刚编写了 Django 代码。您可以评论任何对象。您决定将它与 Wagtail 结合使用。所以对象是一个页面。没有错。 -
感谢您的解释!我是 django 和 wagtail 的新手,所以同时学习两者。如果您将您的评论作为答案,我将很乐意接受它,并且我认为这对使用 django-cmets-xtd 和 wagtail 的任何其他初学者很有用。
标签: django wagtail django-comments