使用url_for()在Flask中创建动态URL


180

我的Flask路线中有一半需要使用变量say /<variable>/add/<variable>/remove。如何创建到这些位置的链接?

url_for() 需要一个参数传递给函数,但是我不能添加参数?

Answers:


277

它使用关键字参数作为变量:

url_for('add', variable=foo)

12
意思是那个功能是def add(variable)
endlith

5
@endolith,是的。** kwargs传递给url_for将通过在烧瓶可变规则路由功能参数
HIGHVOLT

3
但是问题是,如果它是Python中的变量,那么'foo'如何超出范围。那你怎么解决呢?

1
只是为了使它更清晰,如果您具有@app.route("/<a>/<b>")def function(a,b): ...作为其功能,则应使用url_for并指定其关键字参数,如下所示:url_for('function', a='somevalue', b='anothervalue')
jarrettyeo

116

url_forFlask中的ins用于创建URL,以防止必须在整个应用程序(包括模板)中更改URL的开销。如果不使用url_for,则如果您的应用程序的根URL发生更改,则必须在存在该链接的每个页面中进行更改。

句法: url_for('name of the function of the route','parameters (if required)')

它可以用作:

@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>

这样,您可以简单地传递参数!


1
我有一个问题,在第一个示例中,将index方法作为字符串传递,而在第二个方法中,将find_question作为变量传递。为什么?
2015年

1
@AnandTyagi这是您的意思吗?URL路由
Tony Chou

3
@आनंद如果变量这样做:{{ url_for('find_question' ,question_id=question.id) }}{{ url_for('find_question' ,question_id={{question.id}}) }}
阿卜杜勒- Rahmaan Janhangeer


1

范本:

传递函数名称和参数。

<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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.