Перенаправление на URL с идентификатором, основанным на том, что пользователь нажимает - PullRequest
0 голосов
/ 20 мая 2019

Я прочитал другие решения, и ни одно из них не помогло.Таким образом, идея заключается в том, что пользователи отправляют сообщения, на эти сообщения есть ответы, чтобы просмотреть ответы, которые перенаправляет пользователей на /reply/<message_id>, когда пользователь нажимает гиперссылку.Я приложил соответствующий код ниже.

app.py:

@app.route('/reply/<message_id>')
def reply(message_id):
    return render_template('reply.html', message_id = message_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>

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>

Что происходит в данный момент, когда я нажимаю reply, он перенаправляет меня на /reply/, а затем говорит, что не может быть найден.Я ожидаю, что он перенаправит меня на /reply/2 или любой другой идентификатор сообщения, на который я нажму.Спасибо за любую помощь

1 Ответ

2 голосов
/ 21 мая 2019

Предполагая, что mid является переменной javascript, вы не можете смешивать это с кодом Jinja. Рендеринг Jinja будет интерпретировать mid как переменную Python, которая в вашем случае не была установлена ​​во время рендеринга.

Чтобы решить, переместите переменную из кода Jinja. Чтобы url_for работал, вам все равно нужно указать значение message_id. Например:

...' <a href="{{ url_for('reply', message_id='X') }}"'.replace('X', mid) + '>...'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...