1

''topic_posts' 的反面在其他地方也能正常工作。但它在这里不起作用。HTML 文件

                 <td class="align-middle">
                    {% with post=board.get_last_post %}
                    <small>
                        <a href="{% url 'topic_posts' board.id post.topic.id %}">
                            By {{ post.created_by.username }} at {{ post.created_at }}
                            id - {{ board.id }} {{ post.topic.id }}
                        </a>
                    </small>
                    {% endwith %}
                </td>

网址设置

path('boards/<int:board_id>/topics/<int:topic_id>/', views.topic_posts, name='topic_posts'),
    topic = get_object_or_404(Topic, board_id=board_id, id=topic_id)
    return render(request, 'topic_posts.html', {'topic': topic})

当我将board.idand更改post.topic.id为 integer value 时,例如 1 和 24,web 将呈现。我评论<a href="{% url 'topic_posts' board.id post.topic.id %}">添加{{ board.id }} {{ post.topic.id }},看看查询是否有错误,结果没有问题,它会在网页上呈现 1, 24。然后我尝试<a href="{% url 'topic_posts' board.id 24 %}">了它工作正常,但<a href="{% url 'topic_posts' board.id post.topic.id %}">仍然无法工作。

class Board(models.Model):
    name = models.CharField(max_length=30, unique=True)
    description = models.CharField(max_length=100)

    def __str__(self):
        return self.name

    def get_posts_count(self):
        return Post.objects.filter(topic__board=self).count()

    def get_last_post(self):
        return Post.objects.filter(topic__board=self).order_by('-created_at').first()

谢谢阅读!

4

2 回答 2

1

您的模板/HTML 代码中有一个循环。1它起作用的原因24是因为这是循环的第一次迭代,并且您的函数get_last_post返回board带有idof的 a 的最新帖子1。但是,当 for 循环找到board带有idof 的a 时3,不存在最新的帖子并且正在返回None或为空。这就是您收到此错误的原因。错误本质上是说,我找不到只有 aboard_id=3和空的 URL post_id

您可以通过打印来确认这一点:

print(Post.objects.filter(topic__board_id=3).order_by('-created_at').first())

或通过检查您的数据库以查找板上带有 的任何id帖子3

当存在具有最新帖子的板时,您可以通过显示链接来解决此问题,例如:

{% if post.topic.id %}
<a href="{% url 'topic_posts' board.id post.topic.id %}">
    By {{ post.created_by.username }} at {{ post.created_at }} id - {{ board.id }} {{ post.topic.id }}
</a>
{% endif %}
于 2021-06-24T12:36:44.900 回答
0
<a href="{% url 'topic_posts' board.id post.topic.id %}">

Django 无法理解和在这里发帖。尝试在返回渲染期间通过上下文与模板一起发送它

试试这个:

return render(request, 'topic_posts.html', {'topic': topic, 'board': board, 'post': post})
于 2021-06-24T12:47:39.383 回答