为什么我在烧瓶模板中得到了正确的对象,而在点击功能中却得到了一堆数字?

  • 本文关键字:功能 数字 一堆 对象 javascript flask
  • 更新时间 :
  • 英文 :


我正在使用烧瓶开发文章评论。但是,当我通过单击处理程序函数从烧瓶中测试 commentIp 对象时,我得到了一串数字而不是对象。

这是模板代码。(cips:一个 cip 对象的数组;我在模板中得到正确的对象(


{% for i in range(0,comments |length) %}
{% set comment=comments[i] %}
<p>{{ loop.index }}. Email:{{ comment.email }}</p>
<p>PostTime:{{ comment.postTime }}</p>
<p>Content:{{ comment.content }}</p>
{% set up_btn_id='up_btn'~ i|string %}
{% set down_btn_id='down_btn'~ i|string %}
{% if cips[i].vote_state ==0 %}
<button id='{{up_btn_id}}' onclick="upVote(this)">up:{{ comment.upvoteNum }}</button>
<button id="{{down_btn_id}}" onclick="downVote(this)">down:{{ comment.downvoteNum }}</button>
{% elif cips[i].vote_state ==1 %}
<button id='{{up_btn_id}}' onclick="upVote(this)" style="color: green">up:{{ comment.upvoteNum }}</button>
<button id="{{down_btn_id}}" onclick="downVote(this)">down:{{ comment.downvoteNum }}</button>
{% else %}
<button id='{{up_btn_id}}' onclick="upVote(this)">up:{{ comment.upvoteNum }}</button>
<button id="{{down_btn_id}}" onclick="downVote(this)" style="color: red">down:{{ comment.downvoteNum }}</button>
{% endif %}

{% if flag==1 %}
<form action="../cdelete/{{ comment.id }}" method="post">
Password:<input type="password" name="psw">
<input type="submit" value="delete">
</form>
{% endif %}
{% endfor %}

这是upVote函数

function upVote(up_btn) {
const cips = '{{cips}}';
for (let cip in cips)
console.log(cip);//a bunch of Numbers from 0 to 72
}

当值被放入模板中时,它采用文字值。cips数组无法通过javascript理解。想想看,它是你在python中定义的对象列表 - javascript应该如何知道这些是什么?它适用于像comment.upvoteNum这样的值,因为这是一个文字值。它不理解这些对象 - 您可能会看到对象内存地址。因此,为了在javascript中将{{cips}}放入数组中,您需要将这些对象转换为json。Flask为此提供了一些方便的功能 - 查看tojson- 它的HTML安全以及json安全。看起来您正在尝试更新您传入的模型的状态(即赞成票(。您可能希望将其提交到烧瓶视图函数,因此请记住,在 HTML 中对 cip 对象所做的更改就是这样。除非发送回您的服务器并进行处理,否则它们不会反映在 python 中的 cip 模型中。

最新更新