Как использовать пользовательскую функцию python3 в файле шаблона flask? - PullRequest
1 голос
/ 02 апреля 2020

в flask, файлы html хранятся в каталоге /templates. Я все еще новичок в этой микрорамке и python3. в моем основном python коде у меня есть такая функция, как, например,

""" this is the function that I need to use wihtin the html template below"""
def get_status(statusNum):
      if statusNum == 1:
           return 'active'
      if statusNum == 0:
           return 'inactive'


"""this is the function that renders the html"""
@app.route('/')
def index():
    render_template('index.html')

, затем внутри индекса. html, у меня есть этот простой код, например

<html>
<head><title>My Page</title></head>
<body>
<ul>
{% for listing in listings %}
    <li>{{listing.status_num}}</li>
{% endfor %}
</ul>
</body>
</html>

This listing.status_num значение равно либо 1, либо 0, чтобы я мог отобразить такой текст, как «активный» или «неактивный», я хочу использовать свою функцию python, например, get_status (перечисление.status_num) в шаблоне html. ... это вообще возможно? как правильно использовать функцию python внутри шаблона flask html?

1 Ответ

1 голос
/ 02 апреля 2020

Да, существует несколько подходов к этой проблеме.

Первый и самый простой для вашего случая использования - это просто проверить это в самом шаблоне, используя предоставленные параметры Jinja2.

<html>
<head><title>My Page</title></head>
<body>
<ul>
{% for listing in listings %}
    <li>
        {% if listing.status_num == 1 %}
            active
        {% elif listing.status_num == 0 %}
            inactive
        {% endif %}
    </li>
{% endfor %}
</ul>
</body>
</html>

Другой вариант - добавить контекстный процессор в ваше приложение. , Процессоры контекста автоматически вставляют новые переменные в контекст шаблона и запускаются до его визуализации.

@app.context_processor
def utility_processor():
    def get_status(statusNum):
        if statusNum == 1:
            return 'active'
        if statusNum == 0:
            return 'inactive'
    return dict(get_status=get_status)

И затем вы можете использовать его в своем шаблоне следующим образом:

<html>
<head><title>My Page</title></head>
<body>
<ul>
{% for listing in listings %}
    <li>
        {{ get_status(listing.status_num) }}
    </li>
{% endfor %}
</ul>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...