============
Coding Style
============
General
-------
Please follow these conventions while remaining sensible:
* `PEP8 -- Style Guide for Python Code `_
* `PEP257 -- Docstring Conventions `_
* `Django Coding Style `_
`Code Like a Pythonista`_ is recommended reading.
flake8_ and isort_ are used to enforce basic coding standards. To run these
checks, use:
$ make lint
.. _Code Like a Pythonista: http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html
.. _flake8: http://flake8.pycqa.org/en/latest/
.. _isort: http://timothycrosley.github.io/isort/
URLs
----
* List pages should use plurals; e.g. ``/products/``, ``/notifications/``
* Detail pages should simply be a PK/slug on top of the list page; e.g.
``/products/the-bible/``, ``/notifications/1/``
* Create pages should have 'create' as the final path segment; e.g.
``/dashboard/notifications/create/``
* URL names use dashes not underscores.
* Update pages are sometimes the same as detail pages (i.e., when in the
dashboard). In those cases, just use the detail convention, e.g.
``/dashboard/notifications/3/``. If there is a distinction between the detail
page and the update page, use ``/dashboard/notifications/3/update/``.
* Delete pages; e.g., ``/dashboard/notifications/3/delete/``
View class names
----------------
Classes should be named according to::
'%s%sView' % (class_name, verb)
For example, ``ProductUpdateView``, ``OfferCreateView`` and
``PromotionDeleteView``. This doesn't fit all situations, but it's a good basis.
Referencing managers
--------------------
Use ``_default_manager`` rather than ``objects``. This allows projects to
override the default manager to provide domain-specific behaviour.
HTML
----
Please indent with four spaces.