123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- ======================================
- Customizing the Django admin interface
- ======================================
- .. warning::
- The design of the admin has changed somewhat since this document was
- written, and parts may not apply any more. This document is no longer
- maintained since an official API for customizing the Django admin interface
- is in development.
- Django's dynamic admin interface gives you a fully-functional admin for free
- with no hand-coding required. The dynamic admin is designed to be
- production-ready, not just a starting point, so you can use it as-is on a real
- site. While the underlying format of the admin pages is built in to Django, you
- can customize the look and feel by editing the admin stylesheet and images.
- Here's a quick and dirty overview some of the main styles and classes used in
- the Django admin CSS.
- Modules
- =======
- The ``.module`` class is a basic building block for grouping content in the
- admin. It's generally applied to a ``div`` or a ``fieldset``. It wraps the content
- group in a box and applies certain styles to the elements within. An ``h2``
- within a ``div.module`` will align to the top of the ``div`` as a header for the
- whole group.
- .. image:: _images/module.png
- :alt: Example use of module class on admin homepage
- Column Types
- ============
- .. note::
- All admin pages (except the dashboard) are fluid-width. All fixed-width
- classes from previous Django versions have been removed.
- The base template for each admin page has a block that defines the column
- structure for the page. This sets a class on the page content area
- (``div#content``) so everything on the page knows how wide it should be. There
- are three column types available.
- colM
- This is the default column setting for all pages. The "M" stands for "main".
- Assumes that all content on the page is in one main column
- (``div#content-main``).
- colMS
- This is for pages with one main column and a sidebar on the right. The "S"
- stands for "sidebar". Assumes that main content is in ``div#content-main``
- and sidebar content is in ``div#content-related``. This is used on the main
- admin page.
- colSM
- Same as above, with the sidebar on the left. The source order of the columns
- doesn't matter.
- For instance, you could stick this in a template to make a two-column page with
- the sidebar on the right:
- .. code-block:: html+django
- {% block coltype %}colMS{% endblock %}
- Text Styles
- ===========
- Font Sizes
- ----------
- Most HTML elements (headers, lists, etc.) have base font sizes in the stylesheet
- based on context. There are three classes are available for forcing text to a
- certain size in any context.
- small
- 11px
- tiny
- 10px
- mini
- 9px (use sparingly)
- Font Styles and Alignment
- -------------------------
- There are also a few styles for styling text.
- .quiet
- Sets font color to light gray. Good for side notes in instructions. Combine
- with ``.small`` or ``.tiny`` for sheer excitement.
- .help
- This is a custom class for blocks of inline help text explaining the
- function of form elements. It makes text smaller and gray, and when applied
- to ``p`` elements within ``.form-row`` elements (see Form Styles below),
- it will offset the text to align with the form field. Use this for help
- text, instead of ``small quiet``. It works on other elements, but try to
- put the class on a ``p`` whenever you can.
- .align-left
- It aligns the text left. Only works on block elements containing inline
- elements.
- .align-right
- Are you paying attention?
- .nowrap
- Keeps text and inline objects from wrapping. Comes in handy for table
- headers you want to stay on one line.
- Floats and Clears
- -----------------
- float-left
- floats left
- float-right
- floats right
- clear
- clears all
- Object Tools
- ============
- Certain actions which apply directly to an object are used in form and
- changelist pages. These appear in a "toolbar" row above the form or changelist,
- to the right of the page. The tools are wrapped in a ``ul`` with the class
- ``object-tools``. There are two custom tool types which can be defined with an
- additional class on the ``a`` for that tool. These are ``.addlink`` and
- ``.viewsitelink``.
- Example from a changelist page:
- .. code-block:: html+django
- <ul class="object-tools">
- <li><a href="/stories/add/" class="addlink">Add redirect</a></li>
- </ul>
- .. image:: _images/objecttools_01.png
- :alt: Object tools on a changelist page
- and from a form page:
- .. code-block:: html+django
- <ul class="object-tools">
- <li><a href="/history/303/152383/">History</a></li>
- <li><a href="/r/303/152383/" class="viewsitelink">View on site</a></li>
- </ul>
- .. image:: _images/objecttools_02.png
- :alt: Object tools on a form page
- Form Styles
- ===========
- Fieldsets
- ---------
- Admin forms are broken up into groups by ``fieldset`` elements. Each form fieldset
- should have a class ``.module``. Each fieldset should have a header ``h2`` within the
- fieldset at the top (except the first group in the form, and in some cases where the
- group of fields doesn't have a logical label).
- Each fieldset can also take extra classes in addition to ``.module`` to apply
- appropriate formatting to the group of fields.
- .aligned
- This will align the labels and inputs side by side on the same line.
- .wide
- Used in combination with ``.aligned`` to widen the space available for the
- labels.
- Form Rows
- ---------
- Each row of the form (within the ``fieldset``) should be enclosed in a ``div``
- with class ``form-row``. If the field in the row is required, a class of
- ``required`` should also be added to the ``div.form-row``.
- .. image:: _images/formrow.png
- :alt: Example use of form-row class
- Labels
- ------
- Form labels should always precede the field, except in the case
- of checkboxes and radio buttons, where the ``input`` should come first. Any
- explanation or help text should follow the ``label`` in a ``p`` with class
- ``.help``.
|