Можно ли просмотреть живые изменения в html / css со страницы, поданной Flask? [Дубликат]

Вы можете использовать default() для обратной совместимости.

- file:
    path: "{{ item.name | default(item) }}"
    mode: "{{ item.mode | default(omit) }}"
    state: directory
  with_items: your_list

Если item имеет свойство name, используйте его, иначе просто используйте сам элемент.

То же самое касается всех других свойств, которые могут быть у вас в вашем dict. Специальная переменная omit опускает всю задачу из задачи, как если бы модуль не был передан никакому модулю file. Конечно, вы можете установить любое другое значение по умолчанию.

Ссылки на документацию:

56
задан Adam Lear 6 March 2012 в 07:51
поделиться

6 ответов

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

Чтобы перезагрузить приложение при изменении шаблонов (или любого другого файла), вы можете передать аргумент extra_files в Flask().run(), коллекцию имен файлов, чтобы посмотреть: любое изменение этих файлов вызовет перезагрузку.

Пример:

from os import path

extra_dirs = ['directory/to/watch',]
extra_files = extra_dirs[:]
for extra_dir in extra_dirs:
    for dirname, dirs, files in os.walk(extra_dir):
        for filename in files:
            filename = path.join(dirname, filename)
            if path.isfile(filename):
                extra_files.append(filename)
app.run(extra_files=extra_files)

См. здесь: http://werkzeug.pocoo.org/docs/0.10/serving /?highlight=run_simple#werkzeug.serving.run_simple

45
ответ дан LaundroMat 19 August 2018 в 03:25
поделиться
  • 1
    Хорошая вещь! Я признаю, что пропустил ссылку в документации по Flask.run, которая ведет к документам Werkzeug. Но этот конкретный вариант кажется достаточно полезным, чтобы хотя бы упомянуть его в документах Flask. – Xion 1 March 2012 в 20:33
  • 2
    Если кто-нибудь встречает ошибку, которая говорит No such file or directory, попробуйте использовать относительный путь, как в: extra_dirs = ['./directory/to/watch',] – Kevin 15 July 2015 в 05:44
  • 3
    Если вы слишком смущены тем, что path, это os.path. подумал, что стоит упомянуть – bjesus 3 June 2016 в 15:38
  • 4
    Для автоматической перезагрузки после изменения статических файлов см. этот . – roy 22 July 2016 в 11:10
  • 5
    Любая идея указать дополнительные файлы при запуске flask run из командной строки? – Michael Scheper 25 April 2017 в 19:29

На самом деле для меня TEMPLATES_AUTO_RELOAD = True не работает (версия 0.12). Я использую jinja2 и то, что я сделал:

  1. Создать функцию before_request
    def before_request():
        app.jinja_env.cache = {}
    
  2. Зарегистрировать ее в приложении
    app.before_request(before_request)
    
  3. Вот и все .
7
ответ дан dikkini 19 August 2018 в 03:25
поделиться
  • 1
    Я думаю, что шаг 3 не нужен, не так ли? – Garrett 4 April 2017 в 06:56
  • 2
    Гаррет, я не тестировал эти варианты. – dikkini 4 April 2017 в 07:05
  • 3
    Шаг 3 на самом деле не нужен, он работал очень хорошо для меня. – Ricardo Ribeiro 17 September 2017 в 20:30
  • 4
    Это работало для меня, не нужно было применять шаг 3. – Canol Gökel 22 January 2018 в 13:49

Использование последней версии Flask в Windows с использованием команды run и debug, установленной в true; Флажок не требует сброса для внесения изменений в шаблоны. Попробуйте Shift + F5 (или Shift + кнопка перезагрузки), чтобы убедиться, что ничего не кэшировано.

1
ответ дан Drakekin 19 August 2018 в 03:25
поделиться

Что сработало для меня, просто добавьте это:

@app.before_request
def before_request():
    # When you import jinja2 macros, they get cached which is annoying for local
    # development, so wipe the cache every request.
    if 'localhost' in request.host_url or '0.0.0.0' in request.host_url:
        app.jinja_env.cache = {}

(, взятый из ответа @ dikkini )

3
ответ дан Garrett 19 August 2018 в 03:25
поделиться

Когда вы работаете с шаблонами jinja, вам нужно установить некоторые параметры. В моем случае с python3 я решил его с помощью следующего кода:

if __name__ == '__main__':
    app.jinja_env.auto_reload = True
    app.config['TEMPLATES_AUTO_RELOAD'] = True
    app.run(debug=True, host='0.0.0.0')
28
ответ дан silgon 19 August 2018 в 03:25
поделиться
  • 1
    Ты спас мне здравый смысл. Спасибо. – Nostalg.io 20 July 2017 в 07:12
  • 2
    Мне тоже было трудно с этой проблемой. Я рад, что смогу помочь;) – silgon 20 July 2017 в 07:39
  • 3
    Прекрасный простой anser! Твой должен быть принят! – Nam G VU 26 March 2018 в 15:14
  • 4
    Не работает для меня – DanMossa 18 May 2018 в 21:48
  • 5
    Это работает для меня на флэке 1.0.2, но у меня нет аргумента хозяина. – Enrico Borba 13 August 2018 в 03:34

вы можете использовать

TEMPLATES_AUTO_RELOAD = True

Из http://flask.pocoo.org/docs/1.0/config/

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

80
ответ дан 张泽栋 19 August 2018 в 03:25
поделиться
  • 1
    Это решение является обычным, оно поддерживается документацией, простота в понимании и простота в использовании. Это должно быть принято! – Carolyn Conway 13 September 2016 в 21:38
  • 2
    Должен быть принятый ответ. – Antoine 25 December 2016 в 23:43
  • 3
    Любая причина, почему это не будет работать на 0,12? или какие-либо другие настройки, которые препятствовали бы правильной настройке? – user805981 25 January 2017 в 03:00
  • 4
    – user805981 2 March 2017 в 19:33
  • 5
    Не работает. Колба 0.12 – dikkini 4 April 2017 в 07:06