Bladeren bron

Fixed #32744 -- Normalized to pathlib.Path in autoreloader check for template changes.

Hasan Ramezani 3 jaren geleden
bovenliggende
commit
68357b2ca9
3 gewijzigde bestanden met toevoegingen van 28 en 2 verwijderingen
  1. 5 2
      django/template/autoreload.py
  2. 3 0
      docs/releases/3.2.4.txt
  3. 20 0
      tests/template_tests/test_autoreloader.py

+ 5 - 2
django/template/autoreload.py

@@ -1,6 +1,9 @@
+from pathlib import Path
+
 from django.dispatch import receiver
 from django.template import engines
 from django.template.backends.django import DjangoTemplates
+from django.utils._os import to_path
 from django.utils.autoreload import (
     autoreload_started, file_changed, is_django_path,
 )
@@ -15,13 +18,13 @@ def get_template_directories():
         if not isinstance(backend, DjangoTemplates):
             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:
             if not hasattr(loader, 'get_dirs'):
                 continue
             items.update(
-                directory
+                Path.cwd() / to_path(directory)
                 for directory in loader.get_dirs()
                 if not is_django_path(directory)
             )

+ 3 - 0
docs/releases/3.2.4.txt

@@ -22,3 +22,6 @@ Bugfixes
 * 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
   (: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`).

+ 20 - 0
tests/template_tests/test_autoreloader.py

@@ -64,6 +64,26 @@ class TemplateReloadTests(SimpleTestCase):
         autoreload.reset_loaders()
         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
 @override_settings(INSTALLED_APPS=['template_tests'])