2

我使用Flask並且想要渲染html頁面並直接關注特定的dom element使用/#:id渲染html頁面/#:id使用燒瓶

下面是默認/渲染

@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所以它應該直接在DOM專注於所需element

但嘗試return render_template("my-form.html/#output")說明沒有這樣的文件,並且嘗試@app.route('/#output', methods=['POST'])也不起作用。

UPDATE:

考慮這個web應用程序JSON2HTML - http://json2html.herokuapp.com/

發生了什麼:每當一個人點擊send按鈕textarea的輸入和造型設置發送到我的python後端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) 

響應編輯:正如我上面所說,片段標識符是由Web瀏覽器處理,瓶永遠看不到它。首先,您必須將<a name="outputTable">Output</a>添加到您要跳轉到的部分中的模板。然後你有兩個選擇:hacky是編寫你的表格的action屬性,包括hashtag。更好的選擇是添加一個onload Javascript事件處理程序,該處理程序在頁面加載後跳轉。

+0

Thanks @Miguel。請參閱最新的問題。我無法執行所需的操作。 – softvar

+0

我在您的更新中添加了其他評論。 – Miguel