[Django] #32744: Template changes cause dev server to reload

8 views
Skip to first unread message

Django

unread,
May 12, 2021, 1:52:35β€―PM5/12/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
-------------------------------------------+------------------------
Reporter: Ryan P Kilby | Owner: nobody
Type: Bug | Status: new
Component: Template system | Version: 3.2
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------------+------------------------
Django 3.2 has changed the autoreload behavior of the dev server, and it
now reloads on template file changes. Reverting to 3.1 fixes the issue. I
believe this is related to #25791 and
https://github.com/django/django/pull/12928

Template settings:
{{{#!div style="font-size: 90%"
{{{#!python
DEBUG = True

TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [os.path.join(BASE_DIR, "templates")],
"APP_DIRS": True,
"OPTIONS": {
"debug": DEBUG,
"context_processors": [
"django.template.context_processors.debug",
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
],
},
},
]
}}}
}}}

Given that it can take several seconds for the dev server to reload, this
change can be disruptive to template authoring.

--
Ticket URL: <https://code.djangoproject.com/ticket/32744>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
May 12, 2021, 1:53:26β€―PM5/12/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
---------------------------------+--------------------------------------

Reporter: Ryan P Kilby | Owner: nobody
Type: Bug | Status: new
Component: Template system | Version: 3.2
Severity: Normal | Resolution:

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by Ryan P Kilby):

* cc: Ryan P Kilby (added)


--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:1>

Django

unread,
May 13, 2021, 3:09:43β€―AM5/13/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
---------------------------------+--------------------------------------

Reporter: Ryan P Kilby | Owner: nobody
Type: Bug | Status: new
Component: Template system | Version: 3.2
Severity: Normal | Resolution:

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by Carlton Gibson):

* cc: Tom Forbes (added)


--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:2>

Django

unread,
May 13, 2021, 6:00:01β€―AM5/13/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
---------------------------------+--------------------------------------

Reporter: Ryan P Kilby | Owner: nobody
Type: Bug | Status: closed

Component: Template system | Version: 3.2
Severity: Normal | Resolution: worksforme

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by Carlton Gibson):

* status: new => closed
* resolution: => worksforme


Comment:

Hey Ryan πŸ‘‹

Thanks for the report. I'm need more detail, as I'm struggling to
reproduce.

Testing running with Django 3.2.3, both with Django's built-in runserver
and Channels' ASGI based one too. I'm **not seeing** the auto-reload
behaviour on template saves.

My `TEMPLATES` looks almost identical to yours.

Obviously something is going on, but there must be more to it…


{{{
Watching for file changes with StatReloader
}}}

What reloader are you using? πŸ€”

--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:3>

Django

unread,
May 13, 2021, 8:46:27β€―AM5/13/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
---------------------------------+--------------------------------------

Reporter: Ryan P Kilby | Owner: nobody
Type: Bug | Status: closed

Component: Template system | Version: 3.2
Severity: Normal | Resolution: needsinfo

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by Carlton Gibson):

* resolution: worksforme => needsinfo


Comment:

Having seen the duplicate #32745 in the timeline, I've tried again here
(double checking). It's still not reproducing with a fresh project so,
still more info... πŸ€”

I'll upload a sample project with just a single view and template.

Observed: `startproject`, `startapp`, then app template and view.
`runserver`, edit the template. Not reload.

Clearly you're seeing something, but what?
Thanks.

--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:4>

Django

unread,
May 13, 2021, 8:47:27β€―AM5/13/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
---------------------------------+--------------------------------------

Reporter: Ryan P Kilby | Owner: nobody
Type: Bug | Status: closed

Component: Template system | Version: 3.2
Severity: Normal | Resolution: needsinfo

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by Carlton Gibson):

* Attachment "ticket32744.zip" added.

Barest project NOT reproducing editing the hello.html file whilst running
the dev server.

Django

unread,
May 14, 2021, 1:47:30β€―AM5/14/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
---------------------------------+--------------------------------------

Reporter: Ryan P Kilby | Owner: nobody
Type: Bug | Status: new
Component: Template system | Version: 3.2
Severity: Normal | Resolution:

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+--------------------------------------
Changes (by Ryan P Kilby):

* status: closed => new
* resolution: needsinfo =>


Comment:

Hi Carlton,
long time :)

Figured out how to reproduce the issue:

- Ensure `TEMPLATES["DIRS"]` contains a directory path that's a string
instead of a `Path` object.
- Add a template to that directory, point a view to that template.
- Modify/save the template, observe reload

Specifically, the failure is occurring in the
[https://github.com/django/django/pull/12928/files#diff-
85e705dc6a3e8563ae082481a870c003b31fc639accfa6133e47477c9e964c90R48
template_changed] handler's `if template_dir in file_path.parents` check.
As `template_dir` is a string, it fails the comparison to the parent
`Path`s. While the failure occurs here, I'm guessing that
`loader.get_dirs` should normalize its directories to `Path`s.

Also, you'd only hit this issue when upgrading an older settings module.
New projects are setup to use `Path`s, while old projects would be
building paths with `os.path.join()`.

--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:5>

Django

unread,
May 14, 2021, 3:03:38β€―AM5/14/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
---------------------------------+------------------------------------

Reporter: Ryan P Kilby | Owner: nobody
Type: Bug | Status: new
Component: Template system | Version: 3.2
Severity: Release blocker | Resolution:
Keywords: autoreload | Triage Stage: Accepted

Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
---------------------------------+------------------------------------
Changes (by Mariusz Felisiak):

* keywords: => autoreload
* severity: Normal => Release blocker
* stage: Unreviewed => Accepted


Comment:

Thanks for extra details, I'm was able to reproduce this issue with
- `'DIRS': ['template_dir']`,
- `'DIRS': [Path('template_dir')]`, and
- `'DIRS': ['/full/path/to/template_dir']`.

I think we should normalize directories to resolved `Path`s, e.g.

{{{
diff --git a/django/template/autoreload.py b/django/template/autoreload.py
index 36952ef9aa..6a648ce0c3 100644
--- a/django/template/autoreload.py
+++ b/django/template/autoreload.py
@@ -4,6 +4,7 @@ from django.template.backends.django import
DjangoTemplates
from django.utils.autoreload import (
autoreload_started, file_changed, is_django_path,
)
+from django.utils._os import to_path


def get_template_directories():
@@ -15,13 +16,13 @@ def get_template_directories():
if not isinstance(backend, DjangoTemplates):
continue

- items.update(backend.engine.dirs)
+ items.update(to_path(dir).resolve() for dir in
backend.engine.dirs)

for loader in backend.engine.template_loaders:
if not hasattr(loader, 'get_dirs'):
continue
items.update(
- directory
+ to_path(directory).resolve()
for directory in loader.get_dirs()
if not is_django_path(directory)
)
}}}

Regression in 658bcc16f1b814b3a063d3fa16fabaea8b471863.

--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:6>

Django

unread,
May 17, 2021, 3:18:37β€―PM5/17/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
-------------------------------------+-------------------------------------
Reporter: Ryan P Kilby | Owner: Hasan
| Ramezani
Type: Bug | Status: assigned

Component: Template system | Version: 3.2
Severity: Release blocker | Resolution:
Keywords: autoreload | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Hasan Ramezani):

* owner: nobody => Hasan Ramezani
* status: new => assigned


--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:7>

Django

unread,
May 17, 2021, 5:27:46β€―PM5/17/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
-------------------------------------+-------------------------------------
Reporter: Ryan P Kilby | Owner: Hasan
| Ramezani
Type: Bug | Status: assigned
Component: Template system | Version: 3.2
Severity: Release blocker | Resolution:
Keywords: autoreload | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Hasan Ramezani):

* has_patch: 0 => 1


Comment:

[https://github.com/django/django/pull/14407 PR]

--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:8>

Django

unread,
May 18, 2021, 5:29:34β€―AM5/18/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
-------------------------------------+-------------------------------------
Reporter: Ryan P Kilby | Owner: Hasan
| Ramezani
Type: Bug | Status: assigned
Component: Template system | Version: 3.2
Severity: Release blocker | Resolution:
Keywords: autoreload | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Carlton Gibson):

* stage: Accepted => Ready for checkin


--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:9>

Django

unread,
May 18, 2021, 6:07:52β€―AM5/18/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
-------------------------------------+-------------------------------------
Reporter: Ryan P Kilby | Owner: Hasan
| Ramezani
Type: Bug | Status: assigned
Component: Template system | Version: 3.2
Severity: Release blocker | Resolution:
Keywords: autoreload | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Carlton Gibson):

* needs_better_patch: 0 => 1
* stage: Ready for checkin => Accepted


Comment:

There's a Windows test failure to resolve. https://djangoci.com/job/pull-
requests-windows/database=sqlite3,label=windows,python=Python39/11480/

--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:10>

Django

unread,
May 26, 2021, 4:08:48β€―AM5/26/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
-------------------------------------+-------------------------------------
Reporter: Ryan P Kilby | Owner: Hasan
| Ramezani
Type: Bug | Status: closed

Component: Template system | Version: 3.2
Severity: Release blocker | Resolution: fixed

Keywords: autoreload | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Carlton Gibson <carlton.gibson@…>):

* status: assigned => closed
* resolution: => fixed


Comment:

In [changeset:"68357b2ca9e88c40fc00d848799813241be39129" 68357b2]:
{{{
#!CommitTicketReference repository=""
revision="68357b2ca9e88c40fc00d848799813241be39129"
Fixed #32744 -- Normalized to pathlib.Path in autoreloader check for
template changes.
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:11>

Django

unread,
May 26, 2021, 4:09:47β€―AM5/26/21
to django-...@googlegroups.com
#32744: Template changes cause dev server to reload
-------------------------------------+-------------------------------------
Reporter: Ryan P Kilby | Owner: Hasan
| Ramezani
Type: Bug | Status: closed
Component: Template system | Version: 3.2
Severity: Release blocker | Resolution: fixed
Keywords: autoreload | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Carlton Gibson <carlton.gibson@…>):

In [changeset:"c0d506f5ef253f006dbff0b0092c8eecbd45eedf" c0d506f5]:
{{{
#!CommitTicketReference repository=""
revision="c0d506f5ef253f006dbff0b0092c8eecbd45eedf"
[3.2.x] Fixed #32744 -- Normalized to pathlib.Path in autoreloader check
for template changes.

Backport of 68357b2ca9e88c40fc00d848799813241be39129 from main
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/32744#comment:12>

Reply all
Reply to author
Forward
0 new messages