将来自两个不同模型的两个不同变量放在Django模板中的同一行
我需要一个Django模板,比如 “第一个博客标题”-(“第一个博客评论数”) “第二个博客标题”-(“第二个博客评论数”) 最简单的方法是什么? 我试图在我的views.py中创建一个上下文,它同时具有Blog模型和Comment模型,因为变量属于不同的模型。然后我需要将这两个变量放入html中的for循环中,但结果是一个嵌套循环。所以我没有得到我想要的样子 我不仅从后端而且从前端开放各种解决方案将来自两个不同模型的两个不同变量放在Django模板中的同一行,django,django-models,django-templates,Django,Django Models,Django Templates,我需要一个Django模板,比如 “第一个博客标题”-(“第一个博客评论数”) “第二个博客标题”-(“第二个博客评论数”) 最简单的方法是什么? 我试图在我的views.py中创建一个上下文,它同时具有Blog模型和Comment模型,因为变量属于不同的模型。然后我需要将这两个变量放入html中的for循环中,但结果是一个嵌套循环。所以我没有得到我想要的样子 我不仅从后端而且从前端开放各种解决方案 多谢各位 我更新了我的问题,并添加了我的模型和视图 class Author(models.Mo
多谢各位 我更新了我的问题,并添加了我的模型和视图
class Author(models.Model):
name = models.CharField(max_length=100)
surname = models.CharField(max_length=100)
email = models.EmailField()
def __str__(self):
self.name
class Blog(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
heading = models.CharField(max_length= 255)
text = models.CharField(max_length= 5000)
def __str__(self):
self.name
class Comment(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE, related_name='comments')
author = models.CharField(max_length=100)
text_comment = models.CharField(max_length=2000)
def index(request):
blogs = Blog.objects.all
comments = Blog.objects.annotate(number=Count('comments'))
context = {'blog':blogs, 'comments':comments}
return render(request, 'blog/index.html', context)
模板(不起作用)
非常感谢很难想象你有什么数据 例如,在视图的返回语句之前,您最终会得到两个字典
blogs
和comments
。之后,您需要通过外键连接两个词典。
comment[“blog_id”]
和blog[“id”]
在我的示例中
例如:
blogs=[
{“name”:“A”,“id”:1,“text”:“someblogA”},
{“name”:“B”,“id”:2,“text”:“someblogB”},
{“name”:“C”,“id”:3,“text”:“someblogC”},
{“name”:“D”,“id”:4,“text”:“someblogD”},
]
评论=[
{“text”:“commentA”,“id”:11,“blog_id”:1},
{“text”:“commentB”,“id”:12,“blog_id”:2},
{“text”:“commentC”,“id”:13,“blog_id”:2},
{“文本”:“评论”,“id”:14,“博客id”:3},
]
对于博客中的博客:
博客['num_of_comments']=0
评论中的评论:
如果注释[“blog_id”]==blog[“id”]:
博客['num_of_comments']+=1
之后,您可以使用以下语法:
{% for blog in blogs %}
{{blog.name }} {{blog.num_of_comments }}
{% endfor %}
但在我看来,更好的方法是创建序列化程序并加入其中的博客和评论。由于您已经对每个博客的评论数量进行了注释,因此您可以从博客查询集获得“编号”:
# views.py
def index(request):
blog_with_comments = Blog.objects.annotate(number=Count('comments'))
context = {'blog_with_comments': blog_with_comments}
return render(request, 'blog/index.html', context)
#template
{% for blog in blog_with_comments %}
{{ blog.heading }} {{ blog.number }}
{% endfor %}
博客和评论之间有关系吗?你能和我分享你的模特吗?不客气。如果答案足够,你能解决这个问题吗?
# views.py
def index(request):
blog_with_comments = Blog.objects.annotate(number=Count('comments'))
context = {'blog_with_comments': blog_with_comments}
return render(request, 'blog/index.html', context)
#template
{% for blog in blog_with_comments %}
{{ blog.heading }} {{ blog.number }}
{% endfor %}