【发布时间】:2020-09-25 21:17:44
【问题描述】:
我尝试在 Vue 模板中呈现一个 MPTT 模型的评论。我想出了序列化器:
class ArticleCommentSerializer(serializers.ModelSerializer):
article = serializers.StringRelatedField(read_only=True)
parent = serializers.StringRelatedField(read_only=True)
user = serializers.StringRelatedField(read_only=True)
user_image = serializers.StringRelatedField(source='user.image.url', read_only=True)
class Meta:
model = ArticleComment
fields = ["article", "user","parent", "children", "user_image", "content"]
我在视图集中进行查询:
class ArticleCommentsListAPIView(generics.ListAPIView):
queryset = Article.objects.all()
serializer_class = ArticleCommentSerializer
pagination_class = None
def get_queryset(self):
kwarg_slug = self.kwargs.get("slug")
article = get_object_or_404(Article, slug=kwarg_slug)
return ArticleComment.objects.filter(article__slug=kwarg_slug).order_by("-created_at")
现在我得到了 JSON 格式的 API 响应:
[
{
"article": "ytsejam - this is title 2",
"user": "ytsejam",
"parent": "Comment by üçüncü yorum",
"children": [
{
"article": "ytsejam - this is title 2",
"user": "ytsejam",
"parent": "Comment by beşinci yorum",
"children": [],
"user_image": "/media/19_106778977_10158653245217074_823439017239771650_o.jpg",
"content": "altıncı yorum",
"user_thumbnail": "http://localhost:8000/media/cache/d3/40/d340307fa76bde380e9d1677ad9e3a04.jpg",
"voters": 1,
"created_at": "31 May 2020"
}
],
"user_image": "/media/19_106778977_10158653245217074_823439017239771650_o.jpg",
"content": "beşinci yorum",
"user_thumbnail": "http://localhost:8000/media/cache/d3/40/d340307fa76bde380e9d1677ad9e3a04.jpg",
"voters": 1,
"created_at": "31 May 2020"
},
]
我需要帮助才能在 Vue 模板中递归渲染它们。直到现在我提出了这个解决方案,但只渲染第一级:
<ul
v-for="comment in articlesComments"
:key="comment.id">
<li v-if="!comment.parent" class="comment-item has-children">
<div class="comments-content">
<p>{{comment.content}}</p>
</div>
<ul v-if="comment.children" class="children">
<li class="comment-item"
v-for="comment in comment.children"
:key="comment-id">
<div class="comments-content">
<p>{{comment.content}}</p>
</div>
</li>
</ul>
</li>
</ul>
你能指导我递归地渲染它们吗?
【问题讨论】:
标签: vue.js django-rest-framework