【问题标题】:Django template compare two variables not workingDjango模板比较两个变量不起作用
【发布时间】:2016-04-23 08:30:21
【问题描述】:

我正在使用 Django 和 Bootstrap 构建分页。这个变量 pageNum 是从我的 views.py 传递过来的,表示当前页面。我使用 for 循环来生成分页。分页本身很好,但是当我将 forloop.counter 与 pageNum 进行比较以将 class="active" 添加到当前 li 时,它不起作用。但是当我实际打印 pageNum 和 forloop.counter 的值时,它们是相同的。代码如下:

 <ul class="pagination">
 {% for pagination in paginationInfo %}
      <li {% if forloop.counter == pageNum %} class="active" {%endif%} ><a href="{{pagination}}">{{forloop.counter}}</a></li>
 {% endfor %}
 </ul>

【问题讨论】:

  • 您能否展示您在哪里计算并传递pageNum 的视图?
  • 它是一个 GET 变量。我的错。我在视图中使用 int(pageNum) 进行计算,但我将原始(字符串类型)pageNum 传递给模板。
  • 所以不要在模板中使用pageNum|add:"0",我认为这不是理想的解决方案,您可以在模板中传递整数值,然后一切都会正常工作。我这样说是因为如果您再次想在模板中的其他位置使用pageNum,您可能会忘记它不是int
  • AKS 是对的。正如我在回答中建议的那样,您应该将变量转换为int。这将是一个更合适的解决方案。
  • 谢谢。我正在纠正观点。我可能会在代码的其他部分再次发生。

标签: django django-templates


【解决方案1】:

您可能将pageNum 作为字符串传递到模板中。要比较它,您需要在视图中将其转换为 int 或使用 add 过滤器:

<ul class="pagination">
 {% for pagination in paginationInfo %}
    <li {% if forloop.counter == pageNum|add:"0" %} class="active" {%endif%} ><a href="{{pagination}}">{{forloop.counter}}</a></li>
 {% endfor %}
</ul>

【讨论】:

    【解决方案2】:

    您可能将其中一个字段作为不同的数据类型。在我的情况下,其中一项是字符串,您无法将字符串与整数进行比较,因此我不得不将字符串强制转换为整数,见下文

    {% if questions.correct_answer|add:"0" == answers.id %}
        <span>Correct</span>
    {% endif %}
    

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 2017-11-27
      • 1970-01-01
      • 2019-06-24
      • 2012-10-15
      • 2020-02-08
      相关资源
      最近更新 更多