Javascript 根据用户单击的内容重定向到包含id的url

Javascript 根据用户单击的内容重定向到包含id的url,javascript,python,jquery,html,flask,Javascript,Python,Jquery,Html,Flask,我读过其他的解决方案,但没有一个有帮助。因此,这个想法是,用户发送消息,这些消息有回复,当用户单击超链接时,它会将用户重定向到/reply/。我已在下面附上相关代码 app.py: @app.route('/reply/<message_id>') def reply(message_id): return render_template('reply.html', message_id = message_id) @app.route(“/reply/”) def回复(消

我读过其他的解决方案,但没有一个有帮助。因此,这个想法是,用户发送消息,这些消息有回复,当用户单击超链接时,它会将用户重定向到
/reply/
。我已在下面附上相关代码

app.py:

@app.route('/reply/<message_id>')
def reply(message_id):
    return render_template('reply.html', message_id = message_id)
@app.route(“/reply/”)
def回复(消息\u id):
返回呈现模板('reply.html',message\u id=message\u id)
index.html:

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
        <script type="text/javascript">
          var socket = io.connect('http://' + document.domain + ':' + location.port);
          var message_id = 0 ;
          socket.on( 'connect', function() {
            socket.emit( 'my event', {
              data: 'User Connected'
            } )
            var form = $( 'form' ).on( 'submit', function( e ) {
              message_id++
              e.preventDefault()
              let user_input = $( 'input.message' ).val()
              socket.emit( 'my event', {
                message_id : message_id,
                message : user_input
              } )
              $( 'input.message' ).val( '' ).focus()
            } )
          } )
          console.log("we are before the method,a nd mid is " + mid + " of type " + typeof mid)
          socket.on( 'my response', function( msg ) {
            console.log( msg )
            if( typeof msg.message_id !== 'undefined' ) {
              $( 'h3' ).remove()
              console.log("msg.message_id is " + msg.message_id + typeof msg.message_id)
              var mid = msg.message_id
              console.log("we are before the method,a nd mid is " + mid + " of type " + typeof mid)
              $( 'div.message_holder' ).append( '<div>'+mid+'  '+msg.message+'  <a href="{{ url_for('reply', message_id='X') }}"'.replace('X', mid)'>reply</a></div>' ))
            }
          })

        </script>

var socket=io.connect('http://'+document.domain+':'+location.port);
var消息_id=0;
socket.on('connect',function(){
socket.emit('我的事件'{
数据:“用户已连接”
} )
var form=$('form')。在('submit',函数(e)上{
消息id++
e、 预防默认值()
让用户输入=$('input.message').val()
socket.emit('我的事件'{
message_id:message_id,
信息:用户输入
} )
$('input.message').val('').focus()
} )
} )
log(“我们在方法之前,并且mid是“+mid+”类型的“+typeof mid”)
socket.on('my response',函数(msg){
控制台日志(msg)
如果(msg.message_id!的类型==“未定义”){
$('h3')。删除()
console.log(“msg.message\u id为”+msg.message\u id+typeof msg.message\u id)
var mid=msg.message\u id
log(“我们在方法之前,并且mid是“+mid+”类型的“+typeof mid”)
$('div.message_holder')。追加(''+mid+''+msg.message+'')
}
})
reply.html

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>The reply </title>
  </head>
  <body>
    <h1>Hello, your message id was  {{ message_id }}!</h1>
  </body>
</html>

答复
您好,您的邮件id是{{message_id}}!

现在发生的事情是,当我单击
reply
时,它会将我重定向到
/reply/
,然后说找不到。我希望它将我重定向到
/reply/2
或我单击的任何消息id。感谢您的帮助

假设
mid
是一个javascript变量,您不能将其与Jinja代码混用。Jinja渲染将
mid
解释为Python变量,在您的情况下,在渲染时尚未设置该变量

要解决此问题,请将变量移出Jinja代码。要使的
url\u继续工作,您仍然需要为
message\u id
提供一个值。例如:

...' <a href="{{ url_for('reply', message_id='X') }}"'.replace('X', mid) + '>...'
…'…'

假设
mid
是一个javascript变量,您不能将其与Jinja代码混用。Jinja渲染将
mid
解释为Python变量,在您的情况下,在渲染时尚未设置该变量

要解决此问题,请将变量移出Jinja代码。要使
url\u继续工作,您仍然需要为
message\u id
提供一个值。例如:

...' <a href="{{ url_for('reply', message_id='X') }}"'.replace('X', mid) + '>...'
…'…'

尝试添加
console.log(“中值为:+Mid”)行在index.html中指定的行之前,我怀疑它是未定义的。我这样做了,它给出了数字,我甚至做了
typeof
尝试添加
console.log(“中值为:+Mid”)行在index.html中指定的行之前,我怀疑它是未定义的。我这样做了,它给出了数字,我甚至做了
typeof
,为此,我得到了“POST/HTTP/1.1”405-不允许使用方法请求的URL不允许使用该方法。有什么建议吗?这让人困惑,你能把
methods=['GET']
添加到路由定义中,并在你的问题中添加完整的html吗?把methods=['GET']添加到路由(索引)中。它似乎不起作用。在上面的问题中,我还包括了html文件中的主要部分。为此,我得到了“POST/HTTP/1.1”405-methodnotallowed该方法不允许用于请求的URL。有什么建议吗?这让人困惑,你能把
methods=['GET']
添加到路由定义中,并在你的问题中添加完整的html吗?把methods=['GET']添加到路由(索引)中。它似乎不起作用。在上面的问题中,我还包括了html文件中的主要部分。谢谢