在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 %}
我使用 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 %}