【问题标题】:Django ListView not working on the templateDjango ListView 在模板上不起作用
【发布时间】:2021-05-20 09:26:54
【问题描述】:

我在一个看起来非常简单的问题上尝试了几个小时,我尝试了所有方法,但没有成功。我想在模板上显示博客列表。所以,我有这些看法:

from django.views import generic
from .models import Blog

class BlogList(generic.ListView):

    queryset = Blog.objects.filter()
    template_name = 'table_of_contents.html'
    context_object_name = 'blog_list'


class BlogDetail(generic.DetailView):

    model = Blog
    template_name = 'blog.html'

这是table_of_contents.html 模板,我想在其中显示博客列表:

{% block table_of_contents %}
<p>Just for test</p>
{{ blog_list }}
{%endblock table_of_contents %}

我希望这会在前端显示queryset 字符串,但事实并非如此。我使用 Django shell 调试了 BlogList 并确保 queryset 不为空。

我在这里遗漏的(明显的)细节是什么?

编辑: 这也是 blog.html 模板:

{% extends 'base.html' %}
{% block content %}
<p>Test blog template</p>
{% block table_of_contents %} {% include 'table_of_contents.html' %} {% endblock table_of_contents %}
{% endblock content %}

同样,查询字符串根本不会呈现,无论我使用 for 循环还是只执行 {{ blog_list }}

【问题讨论】:

  • 你能分享“父”模板吗?
  • 好的,我添加了对我的问题的编辑。
  • base 的具体外观如何?有table_of_contents的块吗?
  • 没有。在base.html 我有{% block content %} {% endblock content %}。这就是注入blog.html 的地方。 `
  • 因此,blog.html 扩展了 base.html 并且 table_of_contents.html 应该是 blog.html 中的侧边栏。

标签: django listview templates django-queryset


【解决方案1】:

查询集看起来像&lt;QuerySet …&gt;,因此不会在页面上有效呈现,因为它将假定&lt;QuerySet 作为 HTML 标记,而不是作为内容。

您可以做的是迭代 QuerySet 中的项目,并单独渲染它们,例如:

{% block table_of_contents %}
  <p>Just for test</p>
  {% for blog in blog_list %}
    {{ blog.title }}
  {% endfor %}
{%endblock table_of_contents %}

当然在这里我假设您的Blog 模型有一个title 字段。您可能需要将其更改为其他字段。

如果您定义 {% block … %} [Django-doc],这意味着您需要从指定名称为 table_of_contents 的块的父模板继承

因此您需要有一个父模板,例如:

<!-- parent.html -->
My page
{% block table_of_contents %}
{% endblock table_of_contents %}

在您列出博客的模板中,然后您从parent.html 页面继承{% extends … %}

{% extends 'path/to/parent.html' %}
{% block table_of_contents %}
  <p>Just for test</p>
  {% for <b>blog in blog_list</b> %}
    {{ blog<b>.title</b> }}
  {% endfor %}
{%endblock table_of_contents %}

【讨论】:

    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 2022-06-10
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    相关资源
    最近更新 更多