Django HTML模板未从模型的通用视图加载

放宽狐狸

介绍

我目前正在研究该项目的一小部分,以了解有关Django ORM的更多信息并显示单个对象。使用通用视图保持代码干净。(我是Django框架的新手)

目标

本文的目的是显示有多少用户写了一篇文章。例如,我总共有4条文章。我需要显示每个用户写了多少篇文章。

我的控制台输出:

用户 文章数
测试者 2
测试用户1 2
测试用户2 0

我在HTML模板上的输出:

用户 文章数
测试者 0
测试用户1 0
测试用户2 0

问题

我不明白为什么控制台输出正确,但是我的HTML模板没有显示结果。请帮助我理解为什么这样做!!如果有类似的帖子让我知道!我一直到处都在寻找答案,但是我无法在互联网上找到答案。

views.py

from django.views.generic import ListView
from .models import Article
from django.contrib.auth import get_user_model


class ArticleListView(ListView):
    model = Article
    template_name = 'article_list.html'
    context_object_name='article_list'
    queryset=Article.objects.order_by('-date')

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)        
        users = get_user_model().objects.all()
        context["users"] = users
        articles = Article.objects.all()
        for user in users:
            article_count = articles.filter(author__exact=user).values('author').count()
            # works with and without str() function
            context['article_count'] = str(article_count)
            # My console output is correct
            print(str(user) + ': ' + str(articles.filter(author__exact=user).values('author').count()))

        return context

models.py

from django.contrib.auth import get_user_model
from django.db import models
from django.urls import reverse


class Article(models.Model):
    title = models.CharField(max_length=255)
    body = models.TextField()
    date = models.DateTimeField(auto_now_add=True)
    author = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE,
    )

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('article_detail', args=[str(self.id)])

article_list.html

{% extends 'base.html' %}

{% block title %}Articles{% endblock title %}

{% block content %}

   <!-- This is for checking if the articles exist. Nothing to worry here. Output is 4 -->
  {% if article_count > 0 %}
    <p>{{article_count}} There are articles in this list</p>
  {% else %}
   <p>There are no articles in this list</p>
  {% endif %}

  <!-- Main source of the problem!! -->
  {% for user in users %}
    <p>{{user}} = {{article_count}}</p>
  {% endfor %}

  <!-- Displays data from database. Nothing to worry here. -->
  {% for article in article_list %}
    <div class="card">
      <div class="card-header">
        <span class="font-weight-bold">{{ article.title }}</span> &middot;
        <span class="text-muted">by {{ article.author }} | {{ article.date }}</span>
      </div>
      <div class="card-body">
        {{ article.body }}
      </div>
      <div class="card-footer text-center text-muted">
        <a href="{% url 'article_edit' article.pk %}">Edit</a> |
        <a href="{% url 'article_delete' article.pk %}">Delete</a>
      </div>
    </div>
    <br />
  {% endfor %}
{% endblock content %}

希望组织得足够了解问题。提前致谢!!!

埃敏·马斯蒂扎达(Emin Mastizada)

您只是article_count在for循环中重写变量,因此,上下文仅分配给最后计算的值。您可以{"user": {"object": user, "article_count": article_count}}为每个用户创建一个类似的字典,并在对所有用户进行计算之后将该字典分配给上下文,但是,这仍然不是一个明确的方法。

最好的方法是为连接分配一个相关的名称:

class Article(models.Model):
    ...
    author = models.ForeignKey(
        get_user_model(),
        on_delete=models.CASCADE,
        related_name="articles",
    )

然后,在视图中为用户分配上下文:

context["users"] = get_user_model().objects.all()

现在,您可以在模板中显示如下结果:

{% for user in users %}
    <p>{{ user }} = {{ user.articles.count }}</p>
{% endfor %}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django视图模板无法显示模型数据

来自分类Dev

Django模板不从视图加载变量

来自分类Dev

使用模型和视图在 django html 模板中显示聚合总和

来自分类Dev

通用模型的Django Createview

来自分类Dev

Django-通过通用视图加载Robots.txt

来自分类Dev

多对多模型的Django表单。如何从视图/模板填写表单?

来自分类Dev

Django从模板导入模型

来自分类Dev

Django - 加载动态模板

来自分类Dev

JSON帖子未从Django视图获得响应

来自分类Dev

Django通用模板URL参考

来自分类Dev

Django的YearArchiveView通用日期视图

来自分类Dev

Django通用视图更新参数

来自分类Dev

限制对Django通用视图的访问

来自分类Dev

如何从Django模型和HTML模板中获取数据

来自分类Dev

Django:如何将模型数据渲染成 HTML 模板?

来自分类Dev

Django-将变量从函数视图传递到html模板

来自分类Dev

django在视图中获取外键模型并以html显示

来自分类Dev

django模型下拉列表在html视图中丢失

来自分类Dev

Django模板中的嵌套模型

来自分类Dev

从模板使用Django模型方法

来自分类Dev

Django URL问题无法加载我的HTML模板

来自分类Dev

使用HTML下拉列表更改Django模板中加载的变量

来自分类Dev

如何判断我是使用模板的django通用视图(CreateView还是UpdateView)进行创建或更新?

来自分类Dev

Django通用视图:DetailView如何自动将变量提供给模板?

来自分类Dev

如何判断我是使用模板的django通用视图(CreateView还是UpdateView)进行创建或更新?

来自分类Dev

Django基本模板视图方法

来自分类Dev

轮播的Django模板/视图问题

来自分类Dev

Django模板中的树视图

来自分类Dev

django模型HTML允许

Related 相关文章

热门标签

归档