Fixed #23860 -- Documented import order convention.

This commit is contained in:
wrwrwr 2014-11-17 23:35:54 +01:00 committed by Tim Graham
parent db77915c9f
commit cd155c7c71
1 changed files with 79 additions and 8 deletions

View File

@ -32,14 +32,6 @@ Python style
* Use ``InitialCaps`` for class names (or for factory functions that * Use ``InitialCaps`` for class names (or for factory functions that
return classes). return classes).
* Use convenience imports whenever available. For example, do this::
from django.views.generic import View
Don't do this::
from django.views.generic.base import View
* In docstrings, follow :pep:`257`. For example:: * In docstrings, follow :pep:`257`. For example::
def foo(): def foo():
@ -48,6 +40,85 @@ Python style
""" """
... ...
Imports
-------
* Use `isort <https://github.com/timothycrosley/isort#readme>`_ to automate
import sorting using the guidelines below.
Quick start:
.. code-block:: bash
$ pip install isort
$ isort -rc .
This runs ``isort`` recursively from your current directory, modifying any
files that don't conform to the guidelines. If you need to have imports out
of order (to avoid a circular import, for example) use a comment like this::
import module # isort:skip
* Put imports in these groups: future, standard library, third-party libraries,
other Django components, local Django component, try/excepts. Sort lines in
each group alphabetically by the full module name. Place all ``import module``
statements before ``from module import objects`` in each section.
* On each line, alphabetize the items with the upper case items grouped before
the lower case items.
* Break long lines using parentheses and indent continuation lines by 4 spaces.
Include a trailing comma after the last import and put the closing
parenthesis on its own line.
Use a single blank line between the last import and any module level code,
and use two blank lines above the first function or class.
For example (comments are for explanatory purposes only):
.. snippet::
:filename: django/contrib/admin/example.py
# future
from __future__ import unicode_literals
# standard library
import json
from itertools import chain
# third-party
import bcrypt
# Django
from django.http import Http404
from django.http.response import (
Http404, HttpResponse, HttpResponseNotAllowed, StreamingHttpResponse,
cookie,
)
# local Django
from .models import LogEntry
# try/except
try:
import pytz
except ImportError:
pytz = None
CONSTANT = 'foo'
class Example(object):
# ...
* Use convenience imports whenever available. For example, do this::
from django.views.generic import View
instead of::
from django.views.generic.base import View
Template style Template style
-------------- --------------