在Django模板中获取queryset中的值

Get the value in queryset in Django template

我使用 Django 开发了一个网络应用程序。 在 View 函数中,我向前端呈现了一个查询集列表。 在我的例子中,标题 table 是书籍信息, Material 是这本书的详细信息附加到哪个课程,如果这个附加关系是“丢弃”。 is_discard在Materialtable,不是书弃与否。 Material table 一门课程附带的几本书,丢弃状态不是按书而是按 book-course 对,因为有些书可能在一个课程中丢弃但在其他课程中有效

view.py:

def render_2(request):
    books = Title.objects.filter(name=title).values()
    query_results_book_is_discard = 
    Material.objects.filter(id=book_id).values('is_discard')
    return render(request, 'main.html',
                              context= 
    {'query_results_book_is_discard':query_results_book_is_discard, 
      'book', books})

在前端,query_results_book_is_discard 变量显示以下格式:

<QuerySet [{'is_discard': True}, {'is_discard': False}, {'is_discard': False}, {'is_discard': False}, {'is_discard': True}, {'is_discard': True}, {'is_discard': False}]> 

query_results_book_is_discard 变量在前端 Django 模板中循环, 我想使用 forloop 计数器获取值(True 或 False)以使用 if 条件进行检查。 我试过 main.html:

  {% for book in books %}
     {% if query_results_book_is_discard.counter0 != False %}
 ...

{% if query_results_book_is_discard.counter0.is_discard != False %}

 {% if query_results_book_is_discard.is_discard.counter0 != False %}

全部失败。

如何在 query_results_book_is_discard 中获取 True 或 False 值以使用 if 条件?

我建议您创建一个 custom template tag 允许您访问模板中列表的特定索引,如下所示。

你的应用文件树结构应该是这样的:

your_app/
    __init__.py
    models.py
    templatetags/
        __init__.py
        your_app_extras.py
    views.py

然后,在您的自定义模板标记文件中。

your_app_extras.py

from django import template
register = template.Library()

@register.filter
def index(indexable, i):
    return indexable[i]

然后,在您的模板中,加载您的自定义模板标签:

{% load your_app_extras %}

然后,在您的 for 循环中,您使用以下内容:

{% for book in books %}
    {% with query_results_book=query_results_book_is_discard|index:forloop.counter0 %}
        {% if query_results_book.is_discard %}
    {% endwith %}
{% endfor %}