将 JS 变量替换为作为 jinja 模板的字符串
Substituting JS variable into a string that is a jinja template
我的客户端事件处理程序如下:
socket.on('received_message',function(data){
console.log(data);
var actual="{% if "+int(data['user_id'])+"==current_user.id %}<div class=\"user\" id=\"postof"+data['post_id']+"\"\"><span><strong><u>"+data['username']+"</u></strong></span><a href=\"{{url_for('delete_post',post_id="+data['post_id']+",thread_id="+data['thread_id']+")}}\">Delete</a><p>"+data['msg']+"</p></div>{% else %}<div class=\"notuser\" id=\"postof"+data['post_id']+"\"><span><strong><u>"+data['username']+"</u></strong></span><p>"+data['msg']+"</p></div>{% endif %}";
console.log("{{dif_user}}")
console.log('{{current_user.id}}'+" "+data['user_id']);
console.log(actual);
document.getElementById('posts').innerHTML+=actual;
$('.container').scrollTop($('.container')[0].scrollHeight);
});
我对上述事件处理程序的服务器端调用是
socketio.emit('received_message',{'room':data['room'],'user_id':p.user_id,'username':user_.username,'msg':p.message,'post_id':p.id,'thread_id':thread_.id},room=data['room'],dif_user=p.user_id)
现在代码无法正常工作,因为插入的 jinja 代码总是导致执行 else 部分。我如何将 js 变量 data['user_id']
合并到我创建的 actual
变量中,以便 flask 正确呈现它。
我认为 flask 正在将替换的 data['user_id']
作为一个字符串,因此 else 部分正在执行。
你必须考虑到 Jinja 模板是在模板通过 render_template 返回时执行的,因此使用 if 块或 else 块的决定将在那时根据变量的值做出那时。当客户端接收到 Socket.IO 事件时,条件将不会是 re-evaluated,因为事件将在客户端接收而无需 Python 的干预。
如果您希望客户端在接收到 Socket.IO 事件时评估条件,则必须在 JavaScript.
中编写条件
我的客户端事件处理程序如下:
socket.on('received_message',function(data){
console.log(data);
var actual="{% if "+int(data['user_id'])+"==current_user.id %}<div class=\"user\" id=\"postof"+data['post_id']+"\"\"><span><strong><u>"+data['username']+"</u></strong></span><a href=\"{{url_for('delete_post',post_id="+data['post_id']+",thread_id="+data['thread_id']+")}}\">Delete</a><p>"+data['msg']+"</p></div>{% else %}<div class=\"notuser\" id=\"postof"+data['post_id']+"\"><span><strong><u>"+data['username']+"</u></strong></span><p>"+data['msg']+"</p></div>{% endif %}";
console.log("{{dif_user}}")
console.log('{{current_user.id}}'+" "+data['user_id']);
console.log(actual);
document.getElementById('posts').innerHTML+=actual;
$('.container').scrollTop($('.container')[0].scrollHeight);
});
我对上述事件处理程序的服务器端调用是
socketio.emit('received_message',{'room':data['room'],'user_id':p.user_id,'username':user_.username,'msg':p.message,'post_id':p.id,'thread_id':thread_.id},room=data['room'],dif_user=p.user_id)
现在代码无法正常工作,因为插入的 jinja 代码总是导致执行 else 部分。我如何将 js 变量 data['user_id']
合并到我创建的 actual
变量中,以便 flask 正确呈现它。
我认为 flask 正在将替换的 data['user_id']
作为一个字符串,因此 else 部分正在执行。
你必须考虑到 Jinja 模板是在模板通过 render_template 返回时执行的,因此使用 if 块或 else 块的决定将在那时根据变量的值做出那时。当客户端接收到 Socket.IO 事件时,条件将不会是 re-evaluated,因为事件将在客户端接收而无需 Python 的干预。
如果您希望客户端在接收到 Socket.IO 事件时评估条件,则必须在 JavaScript.
中编写条件