如何创建指向另一个html页面的链接?

时间:2014-12-18 04:35:32

标签: python flask

我在一个页面上有一个表单,我想提交到另一个页面。我无法弄清楚如何创建指向该第二页的链接。

项目布局:

Fileserver/
    config.py
    requirements.txt
    run.py
    setup.py
    app/
        __init__.py
        static/
            css/
            img/
            js/
        templates/
            formAction.html
            formSubmit.html
            index.html

__init__.py

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    ip = request.remote_addr
    return render_template('index.html', user_ip=ip)

index.html

<!DOCTYPE html>
<html lang="en">
<body>
    <ul>
        <li><a href="/formSubmit.html">Check Out This Form!</a>
    </ul>
</body>
</html>

我可以在localhost:5000 /没有问题的情况下看到该页面。

我也尝试过:

<a href="{{ url_for('templates', 'formSubmit") }}"></a>

以及:

<a href="{{ url_for('formSubmit') }}"></a>

我错过了什么?

2 个答案:

答案 0 :(得分:26)

url_for生成应用程序中定义的路由的URL。没有(或者可能不应该是)提供的原始html文件,特别是在templates文件夹之外。每个模板都应该是Jinja呈现的内容。您要显示或发布表单的每个位置都应由您的应用程序上的路径处理和生成。

在这种情况下,您可能希望有一条路由在GET上呈现表单并在POST上处理表单提交。

__init__.py

from flask import Flask, request, url_for, redirect, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/cool_form', methods=['GET', 'POST'])
def cool_form():
    if request.method == 'POST':
        # do stuff when the form is submitted

        # redirect to end the POST handling
        # the redirect can be to the same route or somewhere else
        return redirect(url_for('index'))

    # show the form, it wasn't submitted
    return render_template('cool_form.html')

templates/index.html

<!doctype html>
<html>
<body>
    <p><a href="{{ url_for('cool_form') }}">Check out this cool form!</a></p>
</body>
</html>

templates/cool_form.html

<!doctype html>
<html>
<body>
    <form method="post">
        <button type="submit">Do it!</button>
    </form>
</html>

我不知道你的表格和路线究竟是做什么的,所以这只是一个例子。


如果您需要链接静态文件,请将它们放在static文件夹中,然后使用:

url_for('static', filename='a_picture.png')

答案 1 :(得分:0)

所以我刚发现的是,如果我不将href括在括号中,它将起作用,并且我还创建了一个链接以返回页面

@app.route('/blog')
def blog():
    return '<h1>These are my thoughts on <a href=blog/2020/dogs>dogs</a></h1>'

@app.route('/blog/2020/dogs')
def blog2():
    return '<h3>these are my dogs <a href=../../blog>home</a></h3>'