Ответы пользователя по тегу Flask
  • Как захостить Flask сайт на TimeWeb?

    gedev
    @gedev
    сисадмин-энтузиаст
    Если на shared, то смотрите соответствующий раздел документации. Создаёте .htaccess, в котором указываете Apache использовать mod_wsgi для запуска скрипта:

    Options +ExecCGI
    AddHandler wsgi-script .wsgi
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /index.wsgi/$1 [QSA,PT,L]

    Пример index.wsgi:
    activate_this = 'ПУТЬ_ДО_ОКРУЖЕНИЯ/bin/activate_this.py'
    exec(open(activate_this).read())
     
    import sys
    sys.path.insert(0, 'ПУТЬ_ДО_ПРОЕКТА')
    sys.path.insert(1, 'ПУТЬ_ДО_ПАКЕТОВ_PYTHON')
     
    from ИМЯ_МОДУЛЯ import app as application
    Ответ написан
    Комментировать
  • Как подгрузить Flask static на хостинге?

    gedev
    @gedev
    сисадмин-энтузиаст
    Я думаю дело в том, что URL ваших CSS/JS файлов, который указан в index.html имеет следующий вид: http://example.org/static/css/style.css. Но на сервере настоящий путь к файлу будет таким: http://example.org/templates/static/css/style.css. Разумеется вы получаете 404 ошибку на них и у вас отображается голый HTML.

    Сделайте символическую ссылку static, которая указывает на templates/static в DocumentRoot (корневой папке сайта).

    Или, если Apache у вас обрабатывает статику, то поможет такое правило в .htaccess:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^static/(.*)$ templates/static/$1 [QSA,L]
    Ответ написан
    Комментировать
  • Как обновить файлы в flask app nginx?

    gedev
    @gedev
    сисадмин-энтузиаст
    рестартаю сервак

    Это рестарт nginx, gunicorn или вы весь сервер перезапускаете?

    Если редактируете файлы .html которые обрабатывает Flask (темплейты) и при этом старый шаблон сохраняется (кэшируется), то перезапуска gunicorn будет достаточно. Чтобы быть уверенным, сначала прибейте все активные процессы gunicorn с помощью kill / htop, как удобнее, и запускайте снова.

    Если проблема при редактировании html файлов, которые отдаёт nginx напрямую (не проксируя запрос к файлу в ваше приложение), то смотрите настройки кэширования файлов в nginx, исключите кэш html.
    Ответ написан
  • Как устранить ошибка 404 после / в связке nginx-wsgi-flask?

    gedev
    @gedev
    сисадмин-энтузиаст
    Удалите эту строку из конфига Nginx:
    try_files $uri $uri/ =404;
    Тут дело в том, что Nginx должен передавать в бэкенд все запросы, на которые не может отдать ответ сам. Если папка hello действительно не лежит в root, то Nginx вернёт 404.

    SoreMix тоже прав. Во Flask слэш имеет значение. Вы можете отключить строгое соблюдение слэшей добавив в приложение код:

    app.url_map.strict_slashes = False
    Ответ написан
    Комментировать
  • Как сделать перелистывание страниц во flask?

    gedev
    @gedev
    сисадмин-энтузиаст
    Для начала было бы неплохо разбить этот список на те самые страницы по 50.

    Если список ссылок передаётся в виде списка (имеется в виду тип данных), то можно сделать так:

    def paginate(links: list, items_per_page: int) -> list:
        """
        Эта функция разделяет список links на страницы по
        items_per_page элементов на страницу. Возвращает список из списков.
        Пример: [['1', '2'], ['3', '4']]
        """
        pages = []
        i = 0
        j = 0
        while i <= (len(links) - 1):
            while j <= (len(links) - 1):
                j = j + items_per_page
                pages.append((links[i:j]))
                i = i + items_per_page
        return pages


    А вы открывали доки Bootstrap?
    Ответ написан
  • Как скрыть и показать HTML элементов с помощью flask?

    gedev
    @gedev
    сисадмин-энтузиаст
    Если надо реализовать именно через Flask, то можно использовать условные операторы в шаблоне и передавать булево значение в функции render_template(). Пример:

    @app.route('/')
    def index():
        return render_template('index.html', param = True)


    В шаблоне:

    {% if param %}
    <!-- Какой-то HTML -->
    {% endif %}


    По-хорошему такие вещи надо делать во фронтенде через JavaScript.
    Ответ написан
    Комментировать
  • Как можно передать один раз значение в base.html для показа на всем сайте во Flask?

    gedev
    @gedev
    сисадмин-энтузиаст
    Ответ нашёлся в документации. Можно использовать процессоры контекста.
    Функции и переменные переданные через процессор контекста становятся доступны в шаблоне.

    В коде ниже переменная balance передаётся через функцию get_balance(). В шаблоне нет необходимости что-то менять. Обрати внимание, что и переменные и функции возвращаются в виде словаря (dict()).

    app.py:

    from flask import Flask
    from flask import render_template
    
    app = Flask(__name__)
    
    @app.context_processor
    def get_balance():
        balance = '10'
        return dict(balance=balance)
    
    @app.route('/')
    def index():
        return render_template('page.html')
    
    if __name__ == '__main__':
        app.run()
    Ответ написан
    Комментировать