2

Я использую Flask и хочу отображать html-страницы и напрямую фокусироваться на конкретном dom element с использованием /#:id.render html page/#: id using flask

Ниже приведен код по умолчанию / рендеринга

@app.route('/') 
def my_form(): 
    return render_template("my-form.html") 

Ниже функция вызывается по POST запросу.

@app.route('/', methods=['POST']) 
def my_form_post(): 
    #...code goes here 
    return render_template("my-form.html") 

Я хочу сделать мою my-form.html страницы как my-form.html/#output так, что она должна непосредственно сосредоточиться на желаемом element в йоте.

Но попытка return render_template("my-form.html/#output") говорит, что такого файла нет, а попытка @app.route('/#output', methods=['POST']) тоже не работает.

UPDATE:

Рассмотрим этот веб-приложение JSON2HTML - http://json2html.herokuapp.com/

Что происходит: Всякий раз, когда человек нажимает send кнопку ввода текстовое поле и установка стайлинг отправьте на мое python backend flask-app, как показано ниже.

@app.route('/', methods=['POST']) 
    def my_form_post(): 
     #...code for converting json 2 html goes here 
     return render_template("my-form.html",data = processed_data) 

Что я хочу: Всякий раз, когда кнопка нажата send и данные формы POSTED и обрабатываются и та же страница перенаправляется с новым параметром, который содержит processed_data, который будет отображаться. Моя проблема заключается в том, чтобы сделать ту же страницу, добавляющую идентификатор фрагмента #outputTable, чтобы после преобразования страница напрямую фокусировалась на желаемом выходе, который хочет пользователь.

ответ

3

fragment identifier часть URL-адреса никогда не отправляется на сервер, поэтому Flask этого не делает. Предполагается, что это будет обрабатываться в браузере. В Javascript вы можете получить доступ к этому элементу как window.location.hash.

Если вам нужно сделать выделение на сервере, вам нужно искать альтернативный способ указать, что выделить, что сервер получает, чтобы он мог передать его шаблону. Например:

# focus element in the query string 
# http://example.com/route?id=123 
@app.route('/route') 
def route(): 
    id = request.args.get('id') 
    # id will be the given id or None if not available 
    return render_template('my-form.html', id = id) 

А вот еще один способ:

# focus element in the URL 
#http://example.com/route/123 
@app.route('/route') 
@app.route('/route/<id>') 
def route(id = None): 
    # id is sent as an argument 
    return render_template('my-form.html', id = id) 

Ответ на Edit: как я уже говорил выше, идентификатор фрагмента обрабатывается веб-браузером, колба никогда не видит. Чтобы начать, вы должны добавить <a name="outputTable">Output</a> в свой шаблон в той части, в которую хотите перейти. Затем у вас есть два варианта: хакерский - записать атрибут action вашей формы, включая хэштег. Лучше всего добавить обработчик событий Javascript onload, который перескакивает после загрузки страницы.

+0

Спасибо @Miguel. См. Обновленный вопрос. Я не могу выполнить требуемое действие. – softvar

+0

Я добавил дополнительный комментарий к вашему обновлению. – Miguel