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

时间:2016-11-11 11:00:03

标签: python django django-models django-templates

我的views.py移交一个名为" preSelect"的变量。包含整数值。

在模板中我想在If语句中使用Integer来检查当前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已安装的应用程序:   [&#39; django.contrib.admin&#39;,&#39; django.contrib.auth&#39;,   &#39; django.contrib.contenttypes&#39;,&#39; django.contrib.sessions&#39;,   &#39; django.contrib.messages&#39;,&#39; django.contrib.staticfiles&#39;,   &#39; testsetcreation&#39;]已安装的中间件:   [&#39; django.middleware.security.SecurityMiddleware&#39 ;,   &#39; django.contrib.sessions.middleware.SessionMiddleware&#39 ;,   &#39; django.middleware.common.CommonMiddleware&#39 ;,   &#39; django.middleware.csrf.CsrfViewMiddleware&#39 ;,   &#39; django.contrib.auth.middleware.AuthenticationMiddleware&#39 ;,   &#39; django.contrib.messages.middleware.MessageMiddleware&#39 ;,   &#39; django.middleware.clickjacking.XFrameOptionsMiddleware&#39;]

     

模板错误:在模板中   d:\ Django的\ testsetcreation \模板\ testsetcreation \ testsetView.html,   第61行的错误无法解析余数:&#39; {{&#39;来自&#39; {{&#39; 51   :评论52:
  软件版本53:硬件版本
  54:ABP 55:
  项目56:57:
      58:59:{%for row in   行%} 60:61:{%   if forloop.counter&lt; = {{preSelect}}%} 62:
      63:{%else%} 64:
      65:{%endif%} 66:
  {{row.1}} 67:{{row.2}}   68:69:
      70:{{   row.3}} 71:

     

回溯:

     

文件&#34; c:\ Python27 \ lib \ site-packages \ django \ core \ handlers \ exception.py&#34;   在内心     39. response = get_response(request)

     

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

     

文件&#34; c:\ Python27 \ lib \ site-packages \ django \ core \ handlers \ base.py&#34;在   _get_response     185. response = wrapped_callback(request,* callback_args,** callback_kwargs)

     

文件&#34; D:\ Django \ testsetcreation \ views.py&#34;在testsetView中     102. return render(request,&#39; testsetcreation / testsetView.html&#39;,context)

     

文件&#34; c:\ Python27 \ lib \ site-packages \ django \ shortcuts.py&#34;在渲染中     30. content = loader.render_to_string(template_name,context,request,using = using)

     

文件&#34; c:\ Python27 \ lib \ site-packages \ django \ template \ loader.py&#34;在   render_to_string     67. template = get_template(template_name,using = using)

     

文件&#34; c:\ Python27 \ lib \ site-packages \ django \ template \ loader.py&#34;在   get_template     21. return engine.get_template(template_name)

     

文件   &#34; C:\ Python27 \ LIB \站点包\ Django的\模板\后端\ django.py&#34;在   get_template     39.返回模板(self.engine.get_template(template_name),self)

     

文件&#34; c:\ Python27 \ lib \ site-packages \ django \ template \ engine.py&#34;在   get_template     160. template,origin = self.find_template(template_name)

     

文件&#34; c:\ Python27 \ lib \ site-packages \ django \ template \ engine.py&#34;在   find_template     134. name,template_dirs = dirs,skip = skip,

     

文件&#34; c:\ Python27 \ lib \ site-packages \ django \ template \ loaders \ base.py&#34;   在get_template中     44. contents,origin,origin.template_name,self.engine,

     

文件&#34; c:\ Python27 \ lib \ site-packages \ django \ template \ base.py&#34;在   的初始化     191. self.nodelist = self.compile_nodelist()

     

文件&#34; c:\ Python27 \ lib \ site-packages \ django \ template \ base.py&#34;在   compile_nodelist     233. return parser.parse()

     

文件&#34; c:\ Python27 \ lib \ site-packages \ django \ template \ base.py&#34;在解析     518.提升self.error(令牌,e)

     

异常类型:TemplateSyntaxError at / Exception值:不能   解析剩余部分:&#39; {{&#39;来自&#39; {{&#39;

2 个答案:

答案 0 :(得分:3)

在Jinja,

当你使用{%%}标记时,不要把变量放在{{}}

示例代码

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

因此,您案例中的代码将是

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

答案 1 :(得分:0)

要直接回答您的问题,在默认的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 %}