如何在 Django 2.1 中的模板内的 for 循环内设置变量?
Posted
技术标签:
【中文标题】如何在 Django 2.1 中的模板内的 for 循环内设置变量?【英文标题】:How to set a variable inside for loop inside template in Django2.1? 【发布时间】:2020-02-07 07:19:23 【问题描述】:我有一个上下文字典,其中包含要传递给模板的数据。我需要根据我使用 % with %
Django 模板标签实现的一些标志变量来切换两个 div。但是,当我尝试使用 % set %
语法设置变量时,出现以下错误:-
set', expected 'endwith'. Did you forget to register or load this tag?
我遵循here 给出的解决方案,但它给了我错误。
index.html
% with flag=1 %
% for benefit in content.benefits %
<div style="background-color: #fff;" class="row mt-5">
% if not flag %
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="% static "benefit.image" %"
class="img-responsive mx-auto mt-5 w-100 h-75 h-md-50 working-img">
</div>
% endif %
<div class="col-lg-8 col-md-8 col-sm-12 h-100">
% for desc in benefit.heading %
<div class="d-flex h-25 w-100 m-1 mt-4">
<div class="col-3 col-sm-2 h-100">
<div class="mx-auto">
<i class="fas fa-check fa-2x" style="color: #6fe33d"></i>
</div>
</div>
<div class="col-9 col-sm-10">
<div class="d-flex flex-column">
<div class="working-caption font-weight-bold"> desc </div>
# <div class="py-2 working-description-courses text-muted"> description </div>#
</div>
</div>
</div>
% endfor %
</div>
% if flag %
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="% static "benefit.image" %"
class="img-responsive mx-auto mt-5 w-100 h-75 h-md-50 working-img">
</div>
% endif %
</div>
% endfor %
% set flag=1-flag %
% endwith %
settings.py
...
TEMPLATES = [
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS':
'environment': 'myapp.jinja2.environment'
,
,
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS':
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
,
,
]
...
【问题讨论】:
没有名为% set %
AFAIK的标签
您确定您的 index.html 模板正在被 jinja2 处理吗?设置标签仅为 jinja2。模板的完整路径是什么?
@FlipperPA 模板的完整路径是 - courses/template/courses/index.html
@Moha369 我使用了% set %
,因为我找不到任何类似的标签来更新DjangoTemplates
中的flag
变量
你应该看到文档,他们使用with
设置变量,检查内置标签中的with
【参考方案1】:
您尝试使用的命令 set
仅适用于 Jinja2 模板引擎,不适用于 Django 的模板引擎。
https://jinja.palletsprojects.com/en/2.10.x/templates/#assignments
由于您在设置中的 Jinja2 和 Django 模板引擎中都使用了 APP_DIRS
约定,因此您需要将所有 Jinja2 模板放入 courses/jinja2/courses/index.html
而不是 courses/template/courses/index.html
。有关详细信息,请参见此处:
https://docs.djangoproject.com/en/2.2/topics/templates/#django.template.backends.jinja2.Jinja2
祝你好运!
【讨论】:
以上是关于如何在 Django 2.1 中的模板内的 for 循环内设置变量?的主要内容,如果未能解决你的问题,请参考以下文章