Django:如何在模板的 if 语句中使用变量?

Posted

技术标签:

【中文标题】Django:如何在模板的 if 语句中使用变量?【英文标题】:Django: How can I use a variable inside an if statement in the template? 【发布时间】:2017-03-25 14:24:19 【问题描述】:

我的views.py 交出了一个名为“preSelect”的变量,其中包含一个整数值。

在模板中,我想在 If 语句中使用该整数来检查当前的 for 循环计数器是小于还是大于我的值。

% if forloop.counter <=  preSelect  %
    <td><input type="checkbox" name="checks" id="1" value= row.0  checked/></td>
% else %
   <td><input type="checkbox" name="checks" id="1" value= row.0  /></td>
% endif %

然而,这会返回以下错误:

环境:

请求方法:POST 请求地址:http://127.0.0.1:8000/

Django 版本:1.10.2 Python 版本:2.7.11 已安装的应用程序: ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'testsetcreation'] 已安装的中间件: ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']

模板错误:在模板中 D:\Django\testsetcreation\templates\testsetcreation\testsetView.html, 第 61 行的错误无法解析余数:'' from '' 51 : 评论 52 : 软件版本 53 : 硬件版本 54 : ABP 55 : 项目 56 : 57 : 58 : 59 : % for row in 行 % 60 : 61 : % 如果 forloop.counter 63 : % else % 64 : 65 : % endif % 66 : row.1 67 : row.2 68 : 69 : 70: 第 3 行 71 :

追溯:

文件“c:\Python27\lib\site-packages\django\core\handlers\exception.py” 在内部 39. response = get_response(request)

文件“c:\Python27\lib\site-packages\django\core\handlers\base.py”在 _get_response 187. response = self.process_exception_by_middleware(e, request)

文件“c:\Python27\lib\site-packages\django\core\handlers\base.py”在 _get_response 185. response = Wrapped_callback(request, *callback_args, **callback_kwargs)

testsetView 中的文件“D:\Django\testsetcreation\views.py” 102. return render(request, 'testsetcreation/testsetView.html', context)

渲染中的文件“c:\Python27\lib\site-packages\django\shortcuts.py” 30. content = loader.render_to_string(template_name, context, request, using=using)

文件“c:\Python27\lib\site-packages\django\template\loader.py”在 渲染到字符串 67. template = get_template(template_name, using=using)

文件“c:\Python27\lib\site-packages\django\template\loader.py”在 获取模板 21. return engine.get_template(template_name)

文件 "c:\Python27\lib\site-packages\django\template\backends\django.py" 在 获取模板 39. return Template(self.engine.get_template(template_name), self)

文件“c:\Python27\lib\site-packages\django\template\engine.py”在 获取模板 160. 模板,起源 = self.find_template(template_name)

文件“c:\Python27\lib\site-packages\django\template\engine.py”在 查找模板 134. 名称,template_dirs=dirs,skip=skip,

文件“c:\Python27\lib\site-packages\django\template\loaders\base.py” 在 get_template 44. 内容,来源,origin.template_name,self.engine,

文件“c:\Python27\lib\site-packages\django\template\base.py”在 初始化 191. self.nodelist = self.compile_nodelist()

文件“c:\Python27\lib\site-packages\django\template\base.py”在 compile_nodelist 233.返回parser.parse()

解析中的文件“c:\Python27\lib\site-packages\django\template\base.py” 518. raise self.error(token, e)

异常类型:TemplateSyntaxError at / 异常值:不能 解析余数:'' from ''

【问题讨论】:

【参考方案1】:

在 Jinja 中,当你使用 %% 标记时,不要将变量放在

示例代码

% if x > y %
    # Do something
% endif %

所以你的情况下的代码是

% if forloop.counter <= preSelect %
    # Do Something
% endif %

【讨论】:

它适用于默认模板引擎,不仅仅是Jinja 很高兴我能帮上忙 :)【参考方案2】:

要直接回答您的问题,在默认的 Django 模板引擎中,当在条件语句中使用模板变量时,不必将它们包装在花括号中。所以只需删除大括号:

% if forloop.counter <=  preSelect  %
    <td><input type="checkbox" name="checks" id="1" value= row.0  checked/></td>
% else %
   <td><input type="checkbox" name="checks" id="1" value= row.0  /></td>
% endif %

【讨论】:

以上是关于Django:如何在模板的 if 语句中使用变量?的主要内容,如果未能解决你的问题,请参考以下文章

如果评估的变量为 False,为啥我的 django 模板中的这个 IF 语句会执行?

是否可以在 Django 模板的 for 循环中嵌套 if 语句

如何比较两个for循环的值并在django模板中使用if语句?

如何在 django 模板的 forloop 中访问 If 语句中的元组值?

如何在 Django 模板中获得“switch-case”语句功能?

为什么我不能在条件中使用这个django模板变量?