Fixed #32744 -- Normalized to pathlib.Path in autoreloader check for template changes.
This commit is contained in:
parent
7e51893911
commit
68357b2ca9
|
@ -1,6 +1,9 @@
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.template import engines
|
from django.template import engines
|
||||||
from django.template.backends.django import DjangoTemplates
|
from django.template.backends.django import DjangoTemplates
|
||||||
|
from django.utils._os import to_path
|
||||||
from django.utils.autoreload import (
|
from django.utils.autoreload import (
|
||||||
autoreload_started, file_changed, is_django_path,
|
autoreload_started, file_changed, is_django_path,
|
||||||
)
|
)
|
||||||
|
@ -15,13 +18,13 @@ def get_template_directories():
|
||||||
if not isinstance(backend, DjangoTemplates):
|
if not isinstance(backend, DjangoTemplates):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
items.update(backend.engine.dirs)
|
items.update(Path.cwd() / to_path(dir) for dir in backend.engine.dirs)
|
||||||
|
|
||||||
for loader in backend.engine.template_loaders:
|
for loader in backend.engine.template_loaders:
|
||||||
if not hasattr(loader, 'get_dirs'):
|
if not hasattr(loader, 'get_dirs'):
|
||||||
continue
|
continue
|
||||||
items.update(
|
items.update(
|
||||||
directory
|
Path.cwd() / to_path(directory)
|
||||||
for directory in loader.get_dirs()
|
for directory in loader.get_dirs()
|
||||||
if not is_django_path(directory)
|
if not is_django_path(directory)
|
||||||
)
|
)
|
||||||
|
|
|
@ -22,3 +22,6 @@ Bugfixes
|
||||||
* Fixed a crash in Django 3.2 that could occur when running ``mod_wsgi`` with
|
* Fixed a crash in Django 3.2 that could occur when running ``mod_wsgi`` with
|
||||||
the recommended settings while the Windows ``colorama`` library was installed
|
the recommended settings while the Windows ``colorama`` library was installed
|
||||||
(:ticket:`32740`).
|
(:ticket:`32740`).
|
||||||
|
|
||||||
|
* Fixed a bug in Django 3.2 that would trigger the auto-reloader for template
|
||||||
|
changes when directory paths were specified with strings (:ticket:`32744`).
|
||||||
|
|
|
@ -64,6 +64,26 @@ class TemplateReloadTests(SimpleTestCase):
|
||||||
autoreload.reset_loaders()
|
autoreload.reset_loaders()
|
||||||
self.assertEqual(mock_reset.call_count, 2)
|
self.assertEqual(mock_reset.call_count, 2)
|
||||||
|
|
||||||
|
@override_settings(
|
||||||
|
TEMPLATES=[{
|
||||||
|
'DIRS': [
|
||||||
|
str(ROOT) + '/absolute_str',
|
||||||
|
'template_tests/relative_str',
|
||||||
|
Path('template_tests/relative_path'),
|
||||||
|
],
|
||||||
|
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||||
|
}]
|
||||||
|
)
|
||||||
|
def test_template_dirs_normalized_to_paths(self):
|
||||||
|
self.assertSetEqual(
|
||||||
|
autoreload.get_template_directories(),
|
||||||
|
{
|
||||||
|
ROOT / 'absolute_str',
|
||||||
|
Path.cwd() / 'template_tests/relative_str',
|
||||||
|
Path.cwd() / 'template_tests/relative_path',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@require_jinja2
|
@require_jinja2
|
||||||
@override_settings(INSTALLED_APPS=['template_tests'])
|
@override_settings(INSTALLED_APPS=['template_tests'])
|
||||||
|
|
Loading…
Reference in New Issue