使用flask渲染html page /#:id

时间:2013-09-22 13:39:20

标签: javascript python-2.7 flask fragment-identifier html-rendering

我正在使用Flask并希望使用dom element呈现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'])也不起作用。

更新

考虑此网络应用 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,以便在转换后页面直接关注用户想要的所需输出。

1 个答案:

答案 0 :(得分:3)

URL的fragment identifier部分永远不会发送到服务器,因此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浏览器处理,Flask从未看到它。首先,您必须在要跳转到的部分中将<a name="outputTable">Output</a>添加到模板中。然后你有两个选择:hacky是编写表单的action属性,包括主题标签。更好的选择是添加一个onload Javascript事件处理程序,该事件处理程序在页面加载后跳转。