Необязательные ли параметры маршрутизации в flask должны быть установлены в "none" в функции? - PullRequest
0 голосов
/ 30 января 2020

Этот код взят из https://code.visualstudio.com/docs/python/tutorial-flask#_optional -активности для настройки базового c веб-приложения с использованием flask и python в коде Visual Studio.

Почему функция "hello_there" имеет параметр "name = None"? Разве функция не должна просто передавать имя без указания чего-либо еще? Для меня, render_template должен устанавливать имя в None, так как "name = None" является параметром функции. Этот ответ: flask аргумент в render_template подсказывает, что flask перезаписывает параметр функции. Если это так, нужно ли функции иметь параметр "name = None"?

@app.route("/hello/")
@app.route("/hello/<name>")
def hello_there(name = None):
    return render_template(
        "hello_there.html",
        name=name,
        date=datetime.now()
    )

1 Ответ

1 голос
/ 30 января 2020

name = None - это то, что называется значением аргумента по умолчанию , и в случае функции, которую вы опубликовали, похоже, служит способом обеспечения работы функции hello_there с name или без него проходить

Обратите внимание на декораторы функций:

@app.route("/hello/")
@app.route("/hello/<name>")

Это означает, что ожидаемый вызов для этой функции: с или без имени параметра. Установив name аргумент по умолчанию на None, мы можем гарантировать, что если name никогда не будет передано, функция все равно сможет правильно отобразить страницу. Обратите внимание на следующее:

>>> def func(a):
...     return a

>>> print(func())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: func() missing 1 required positional argument: 'a'

против

>>> def func(a = None):
...     return a

>>> print(func())
None

Обратите внимание на то, как на опубликованную вами функцию name есть ссылка в return:

    return render_template(
        "hello_there.html",
        name=name,
        date=datetime.now()
    )

Если name не определено заранее, вы увидите ошибку, указанную выше. Другое дело - если бы мне пришлось угадывать - я бы предположил, что в шаблоне hello_there.html есть переключение контекста для случаев, когда name равен None, и для случаев, когда это что-то:

{% if name %}
    <b> Hello {{ name }}! </b>
{% else %}
    <b> Hello! </b>
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...