diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 46c2cf8707..b13a9bab4a 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -29,7 +29,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.13' + python-version: '3.14' cache: 'pip' cache-dependency-path: 'docs/requirements.txt' - run: python -m pip install -r docs/requirements.txt @@ -47,7 +47,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.13' + python-version: '3.14' - run: python -m pip install blacken-docs - name: Build docs run: | diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index d89085b4a7..0f64cae681 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -27,7 +27,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.13' + python-version: '3.14' - run: python -m pip install flake8 - name: flake8 # Pinned to v3.0.0. @@ -44,7 +44,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.13' + python-version: '3.14' - run: python -m pip install "isort<6" - name: isort # Pinned to v3.0.0. diff --git a/.github/workflows/schedule_tests.yml b/.github/workflows/schedule_tests.yml index 5e6038fb31..dc3157f51b 100644 --- a/.github/workflows/schedule_tests.yml +++ b/.github/workflows/schedule_tests.yml @@ -20,7 +20,7 @@ jobs: - '3.11' - '3.12' - '3.13' - - '3.14-dev' + - '3.14' name: Windows, SQLite, Python ${{ matrix.python-version }} continue-on-error: true steps: @@ -47,7 +47,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.13' + python-version: '3.14' cache: 'pip' - name: Install libmemcached-dev for pylibmc run: sudo apt-get install libmemcached-dev @@ -146,7 +146,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.13' + python-version: '3.14' cache: 'pip' cache-dependency-path: 'tests/requirements/py3.txt' - name: Install libmemcached-dev for pylibmc @@ -182,7 +182,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.13' + python-version: '3.14' cache: 'pip' cache-dependency-path: 'tests/requirements/py3.txt' - name: Install libmemcached-dev for pylibmc @@ -227,7 +227,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.13' + python-version: '3.14' cache: 'pip' cache-dependency-path: 'tests/requirements/py3.txt' - name: Install libmemcached-dev for pylibmc diff --git a/.github/workflows/selenium.yml b/.github/workflows/selenium.yml index 14a95f3b66..de36f1c084 100644 --- a/.github/workflows/selenium.yml +++ b/.github/workflows/selenium.yml @@ -24,7 +24,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.13' + python-version: '3.14' cache: 'pip' cache-dependency-path: 'tests/requirements/py3.txt' - name: Install libmemcached-dev for pylibmc @@ -61,7 +61,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.13' + python-version: '3.14' cache: 'pip' cache-dependency-path: 'tests/requirements/py3.txt' - name: Install libmemcached-dev for pylibmc diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3373f82e0a..2ae1e3ef90 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -23,7 +23,7 @@ jobs: strategy: matrix: python-version: - - '3.13' + - '3.14' name: Windows, SQLite, Python ${{ matrix.python-version }} steps: - name: Checkout diff --git a/docs/faq/install.txt b/docs/faq/install.txt index dcbae30ae3..c986535271 100644 --- a/docs/faq/install.txt +++ b/docs/faq/install.txt @@ -53,7 +53,7 @@ Django version Python versions 4.2 3.8, 3.9, 3.10, 3.11, 3.12 (added in 4.2.8) 5.0 3.10, 3.11, 3.12 5.1 3.10, 3.11, 3.12, 3.13 (added in 5.1.3) -5.2 3.10, 3.11, 3.12, 3.13 +5.2 3.10, 3.11, 3.12, 3.13, 3.14 (added in 5.2.8) ============== =============== For each version of Python, only the latest micro release (A.B.C) is officially diff --git a/docs/howto/windows.txt b/docs/howto/windows.txt index 235b18a24f..63e497be04 100644 --- a/docs/howto/windows.txt +++ b/docs/howto/windows.txt @@ -2,7 +2,7 @@ How to install Django on Windows ================================ -This document will guide you through installing Python 3.13 and Django on +This document will guide you through installing Python 3.14 and Django on Windows. It also provides instructions for setting up a virtual environment, which makes it easier to work on Python projects. This is meant as a beginner's guide for users working on Django projects and does not reflect how Django @@ -18,7 +18,7 @@ Install Python ============== Django is a Python web framework, thus requiring Python to be installed on your -machine. At the time of writing, Python 3.13 is the latest version. +machine. At the time of writing, Python 3.14 is the latest version. To install Python on your machine go to https://www.python.org/downloads/. The website should offer you a download button for the latest Python version. diff --git a/docs/intro/reusable-apps.txt b/docs/intro/reusable-apps.txt index b353cdc9bb..6148b4e94b 100644 --- a/docs/intro/reusable-apps.txt +++ b/docs/intro/reusable-apps.txt @@ -238,6 +238,7 @@ this. For a small app like polls, this process isn't too difficult. "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", ] diff --git a/docs/releases/5.2.8.txt b/docs/releases/5.2.8.txt index dc750e4636..4151012387 100644 --- a/docs/releases/5.2.8.txt +++ b/docs/releases/5.2.8.txt @@ -4,7 +4,8 @@ Django 5.2.8 release notes *Expected November 5, 2025* -Django 5.2.8 fixes several bugs in 5.2.7. +Django 5.2.8 fixes several bugs in 5.2.7 and adds compatibility with Python +3.14. Bugfixes ======== diff --git a/docs/releases/5.2.txt b/docs/releases/5.2.txt index 20d82db98e..b80c8effd2 100644 --- a/docs/releases/5.2.txt +++ b/docs/releases/5.2.txt @@ -23,8 +23,9 @@ end in April 2026. Python compatibility ==================== -Django 5.2 supports Python 3.10, 3.11, 3.12, and 3.13. We **highly recommend** -and only officially support the latest release of each series. +Django 5.2 supports Python 3.10, 3.11, 3.12, 3.13, and 3.14 (as of 5.2.8). We +**highly recommend** and only officially support the latest release of each +series. .. _whats-new-5.2: diff --git a/pyproject.toml b/pyproject.toml index 3306ef9cef..a8381a122a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: WSGI", diff --git a/tests/mail/tests.py b/tests/mail/tests.py index 833b688741..e017c7f9cf 100644 --- a/tests/mail/tests.py +++ b/tests/mail/tests.py @@ -185,7 +185,7 @@ class MailTests(MailTestsMixin, SimpleTestCase): """Line length check should encode the payload supporting `surrogateescape`. Following https://github.com/python/cpython/issues/76511, newer - versions of Python (3.11.9, 3.12.3 and 3.13) ensure that a message's + versions of Python (3.11.9, 3.12.3 and 3.13+) ensure that a message's payload is encoded with the provided charset and `surrogateescape` is used as the error handling strategy. diff --git a/tests/requirements/py3.txt b/tests/requirements/py3.txt index f0e208a115..a9679af97c 100644 --- a/tests/requirements/py3.txt +++ b/tests/requirements/py3.txt @@ -6,8 +6,8 @@ black docutils >= 0.19 geoip2 jinja2 >= 2.11.0 -numpy; python_version < '3.14' -Pillow >= 6.2.1; sys.platform != 'win32' or python_version < '3.14' +numpy +Pillow >= 6.2.1 # pylibmc/libmemcached can't be built on Windows. pylibmc; sys_platform != 'win32' pymemcache >= 3.4.0 diff --git a/tox.ini b/tox.ini index 7a76693f21..9d4bab43b4 100644 --- a/tox.ini +++ b/tox.ini @@ -26,7 +26,7 @@ setenv = PYTHONDONTWRITEBYTECODE=1 deps = -e . - py{3,310,311,312,313,py3}: -rtests/requirements/py3.txt + py{3,310,311,312,313,314,py3}: -rtests/requirements/py3.txt postgres: -rtests/requirements/postgres.txt mysql: -rtests/requirements/mysql.txt oracle: -rtests/requirements/oracle.txt