Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将来自两个不同模型的两个不同变量放在Django模板中的同一行_Django_Django Models_Django Templates - Fatal编程技术网

将来自两个不同模型的两个不同变量放在Django模板中的同一行

将来自两个不同模型的两个不同变量放在Django模板中的同一行,django,django-models,django-templates,Django,Django Models,Django Templates,我需要一个Django模板,比如 “第一个博客标题”-(“第一个博客评论数”) “第二个博客标题”-(“第二个博客评论数”) 最简单的方法是什么? 我试图在我的views.py中创建一个上下文,它同时具有Blog模型和Comment模型,因为变量属于不同的模型。然后我需要将这两个变量放入html中的for循环中,但结果是一个嵌套循环。所以我没有得到我想要的样子 我不仅从后端而且从前端开放各种解决方案 多谢各位 我更新了我的问题,并添加了我的模型和视图 class Author(models.Mo

我需要一个Django模板,比如

“第一个博客标题”-(“第一个博客评论数”)

“第二个博客标题”-(“第二个博客评论数”)

最简单的方法是什么? 我试图在我的views.py中创建一个上下文,它同时具有Blog模型和Comment模型,因为变量属于不同的模型。然后我需要将这两个变量放入html中的for循环中,但结果是一个嵌套循环。所以我没有得到我想要的样子

我不仅从后端而且从前端开放各种解决方案
多谢各位

我更新了我的问题,并添加了我的模型和视图

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 %}