【问题标题】:Django template ifequal statement always trueDjango 模板 ifequal 语句始终为真
【发布时间】:2013-11-29 17:34:32
【问题描述】:

您好,我正在使用 Python/Django 构建一个简单的博客。在我的 index.html 文件中,我试图在单击包含月份的按钮时显示存档的帖子。目前,我只是想将那个月发布的每个帖子的 id 放入一个 javascript 数组中。但由于某种原因,它总是返回 true!

<script type="text/javascript">
function showPosts(month)
{
var posts_in_month=[];
{% for post in all_posts %}
var match = {{ post.pub_date.month }}
    {% ifequal match month %}
      posts_in_month.push({{ post.id }})
    {% endifequal %}
{% endfor %}
}
</script>

然后我继续使用 switch 语句,根据单击的月份显示数组的内容。该代码确实有效,当我调用 alert(month) 时它会正确显示,当我调用 alert({{ post.pub_date.month }}) 时它也显示得很好。但是这些通常不一样,为什么它总是将 ifequal 评估为 true?

【问题讨论】:

  • 您将 django 变量与 javascrip 变量混合,matchmonth 不是 django 范围,您不能使用 ifequal
  • 你是对的。我看到我做了什么。解决方案是使用使用 js 的 if 语句而不是模板标签。 if(match==month) { posts_in_month.push({{ post.id }}) } 我对 Javascript 也很陌生(老实说,完全是菜鸟),所以我看不出有什么问题。跨度>
  • 查看生成的 HTML 代码,它无济于事。
  • @user2676680 请不要那样做。混合和匹配 Django 模板语言和 javascript 将导致您遇到问题。与其将 javascript 与 django 模板耦合,不如尝试解耦。
  • 很高兴知道。我会牢记这一点,并在未来避免这种陷阱。谢谢。

标签: javascript python django templates


【解决方案1】:

您不能在 python 中创建 Javascript 变量并将其用作 python 的变量。

用实际值替换match

{% ifequal post.pub_date.month month %}
  posts_in_month.push({{ post.id }})
{% endifequal %}

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 2011-01-07
    • 1970-01-01
    • 2021-01-07
    • 2012-03-07
    • 2017-12-29
    • 2010-10-01
    • 2011-11-22
    • 1970-01-01
    相关资源
    最近更新 更多