Створіть динамічні URL-адреси в колбі за допомогою url_for ()


183

Половина моїх фляшкових маршрутів вимагає змінної казки, /<variable>/addабо /<variable>/remove. Як створити посилання на ці місця?

url_for() бере один аргумент для функції до маршруту, але я не можу додати аргументи?

Відповіді:


281

Він бере аргументи ключових слів для змінних:

url_for('add', variable=foo)

12
тобто функція def add(variable)?
ендоліт

5
@endolith, так. ** kwargs, передані в url_for, передаватимуться як параметри функції для маршрутів змінних правил у колбі
highvolt

3
Але проблема полягає в тому, як "foo" виходить за межі, якщо це змінна з Python. Тоді, як ти це вирішуєш?

1
Просто для того, щоб було зрозуміліше, якщо у вас є @app.route("/<a>/<b>")і def function(a,b): ...як його функція, то вам слід використовувати url_forта вказати його ключові аргументи на зразок цього:url_for('function', a='somevalue', b='anothervalue')
jarrettyeo

119

url_forу Flask використовується для створення 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
У мене є питання, у першому прикладі метод індексу передавались як рядок, а у другому методі find_question передається як змінний. Чому?
आनंद

1
@AnandTyagi Це ви маєте на увазі? Маршрутизація URL
Tony Chou

3
@ आनंद, якщо ви зробите змінну: {{ url_for('find_question' ,question_id=question.id) }}а ні{{ url_for('find_question' ,question_id={{question.id}}) }}
Abdur-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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.