Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

50 lines (32 sloc) 1.6 kb
Python 3 compatibility
Django 1.5 is the first version of Django to support Python 3.
The same code runs both on Python 2 (≥2.6.5) and Python 3 (≥3.2). To
achieve this:
- wherever possible, Django uses the six_ compatibility layer,
- all modules declare ``from __future__ import unicode_literals``.
.. _six:
This document is not meant as a Python 2 to Python 3 migration guide. There
are many existing resources, including `Python's official porting guide`_. But
it describes guidelines that apply to Django's code and are recommended for
pluggable apps that run with both Python 2 and 3.
.. _Python's official porting guide:
.. module: django.utils.six
Read the documentation of six_. It's the canonical compatibility library for
supporting Python 2 and 3 in a single codebase.
``six`` is bundled with Django: you can import it as :mod:`django.utils.six`.
.. _string-handling:
String handling
In Python 3, all strings are considered Unicode strings by default. Byte
strings must be prefixed with the letter ``b``. In order to enable the same
behavior in Python 2, every module must import ``unicode_literals`` from
from __future__ import unicode_literals
my_string = "This is an unicode literal"
my_bytestring = b"This is a bytestring"
Be cautious if you have to `slice bytestrings`_.
.. _slice bytestrings:
Jump to Line
Something went wrong with that request. Please try again.