我有一半的Flask路由需要一个变量,例如/<variable>/add或/<variable>/remove。如何创建指向这些位置的链接?
url_for()需要一个参数的函数路由,但我不能添加参数?
我有一半的Flask路由需要一个变量,例如/<variable>/add或/<variable>/remove。如何创建指向这些位置的链接?
url_for()需要一个参数的函数路由,但我不能添加参数?
当前回答
url_for在Flask中用于创建URL,以防止在整个应用程序中(包括在模板中)更改URL的开销。如果没有url_for,如果你的应用程序的根URL发生了变化,那么你必须在链接存在的每个页面中改变它。
语法:url_for('路由函数的名称','参数(如果需要)')
它可以用于:
@app.route('/index')
@app.route('/')
def index():
return 'you are in the index page'
现在如果你有一个索引页的链接:你可以使用这个:
<a href={{ url_for('index') }}>Index</a>
你可以用它做很多事情,例如:
@app.route('/questions/<int:question_id>') #int has been used as a filter that only integer will be passed in the url otherwise it will give a 404 error
def find_question(question_id):
return ('you asked for question{0}'.format(question_id))
对于上述情况,我们可以使用:
<a href = {{ url_for('find_question' ,question_id=1) }}>Question 1</a>
像这样,您可以简单地传递参数!
其他回答
url_for在Flask中用于创建URL,以防止在整个应用程序中(包括在模板中)更改URL的开销。如果没有url_for,如果你的应用程序的根URL发生了变化,那么你必须在链接存在的每个页面中改变它。
语法:url_for('路由函数的名称','参数(如果需要)')
它可以用于:
@app.route('/index')
@app.route('/')
def index():
return 'you are in the index page'
现在如果你有一个索引页的链接:你可以使用这个:
<a href={{ url_for('index') }}>Index</a>
你可以用它做很多事情,例如:
@app.route('/questions/<int:question_id>') #int has been used as a filter that only integer will be passed in the url otherwise it will give a 404 error
def find_question(question_id):
return ('you asked for question{0}'.format(question_id))
对于上述情况,我们可以使用:
<a href = {{ url_for('find_question' ,question_id=1) }}>Question 1</a>
像这样,您可以简单地传递参数!
参考Flask .url_for()的Flask API文档
下面是将js或css链接到模板的其他示例片段。
<script src="{{ url_for('static', filename='jquery.min.js') }}"></script>
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">
它接受变量的关键字参数:
url_for('add', variable=foo)
url_for('remove', variable=foo)
烧瓶服务器将具有以下功能:
@app.route('/<variable>/add', methods=['GET', 'POST'])
def add(variable):
@app.route('/<variable>/remove', methods=['GET', 'POST'])
def remove(variable):
模板:
传递函数名和参数。
<a href="{{ url_for('get_blog_post',id = blog.id)}}">{{blog.title}}</a>
视图、功能
@app.route('/blog/post/<string:id>',methods=['GET'])
def get_blog_post(id):
return id
如果这有帮助,你可以在声明flask应用程序时覆盖静态文件夹。
app = Flask(__name__,
static_folder='/path/to/static',
template_folder='/path/to/templates')