如何让Django在模板更改时重启runserver?

Eri*_*ric 26 django templates

当我在项目中的python源文件中进行修改时,Django检测到并重启runserver本身.但是当我修改django模板时,我必须杀死runserver并重新启动它:如何在模板更改时自动重启runserver?

knu*_*tin 18

默认情况下,每次请求都会从磁盘读取该文件,因此无需重新启动任何内容.

有一个缓存模板加载器,但默认情况下它被禁用.有关详细信息,请参阅文档.

  • 在设置中,我忘了我已经设置了模板缓存.所以我用"django.template.loaders.app_directories.Loader"替换('django.template.loaders.cached.Loader',('django.template.loaders.app_directories.Loader',)),现在没有重启是需要:非常感谢 (3认同)
  • 看起来crispyforms模板需要重启的原因是它们使用memoize()函数来缓存模板.没有任何方法可以在开发模式下关闭它,这可能会导致很多混乱.浏览Django源时,唯一使用memoize()的地方是存储模式,这就是为什么runserver需要重新启动才能更改URL. (2认同)
  • 关于crispyforms,我想知道您是否可以使用*liveupdate* 来告诉浏览器在源文件更改时进行更新。看看 https://github.com/tjwalch/django-livereload-server。我安装了 django-livereload-server,现在浏览器更新以反映对从模板中的标签加载的 javascript 文件的编辑。 (2认同)

Ign*_*ams 8

运行touch对Python源文件之一.

因为runserver监视.py文件的更改,它不会重新启动以更改模板(.html).您可以通过使用touch命令虚拟编辑任何.py文件来触发此重新启动,该命令刷新其修改日期并使所有其他内容保持不变.

  • @ kermit666:不,他说他编辑了一个模板.模板不是Python源文件. (2认同)

Rab*_*eih 7

为了增加knutin的回答,您所面临的问题正好由FetchFromCacheMiddleware引起的,因此所有你需要做的就是在settings.py文件禁用如下内容:

settings.py:

MIDDLEWARE_CLASSES = (
    ...
    #'django.middleware.cache.FetchFromCacheMiddleware',
    ...
)
Run Code Online (Sandbox Code Playgroud)


The*_*yce 7

另一个解决方案是确保您已debugTEMPLATES配置中设置为 truesettings.py

DEBUG = True

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['templates/'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'debug': DEBUG,
        },
    },
]
Run Code Online (Sandbox Code Playgroud)

debug为 False 时,您必须手动重新启动服务器以查看对模板所做的任何更改(因为它们不会自动触发重新启动)