| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- ==========================
- How to customise templates
- ==========================
-
- Assuming you want to use oscar's templates in your project, there are two
- options. You don't have to though - you could write all your own templates if
- you like. If you do this, it's probably best to start with a straight copy of
- all of oscar's templates so you know all the files that you need to
- re-implement.
-
- Anyway - here are the two options for customising.
-
- Method 1 - Forking
- ------------------
-
- One option is always just to fork the template into your local project so that
- it comes first in the include path.
-
- Say you want to customise ``base.html``. First you need a project-specific
- templates directory that comes first in the include path. You can set this up
- as so::
-
- TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
- )
-
- import os
- location = lambda x: os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', x)
- TEMPLATE_DIRS = (
- location('templates'),
- )
-
- Next copy oscar's ``base.html`` into your templates directory and customise it
- to suit your needs.
-
- The downsides of this method are that it involves duplicating the file from
- oscar in a way that breaks the link with upstream. Hence, changes to oscar's
- ``base.html`` won't be picked up by your project as you will have your own
- version.
-
- Method 2 - Subclass parent but use same template path
- -----------------------------------------------------
-
- There is a trick you can perform whereby oscar's templates can be accessed via
- two paths. This is outlined in the `django wiki`_.
-
- .. _`django wiki`: https://code.djangoproject.com/wiki/ExtendingTemplates
-
- This basically means you can have a ``base.html`` in your local templates folder
- that extends oscar's ``base.html`` but only customises the blocks that it needs
- to.
-
- Oscar provides a helper variable to make this easy. First, set up your
- template configuration as so::
-
- TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
- )
-
- import os
- location = lambda x: os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', x)
- from oscar import OSCAR_PARENT_TEMPLATE_DIR
- TEMPLATE_DIRS = (
- location('templates'),
- OSCAR_PARENT_TEMPLATE_DIR,
- )
-
- The ``OSCAR_PARENT_TEMPLATE_DIR`` points to the directory above oscar's normal
- templates directory. This means that ``path/to/oscar/template.html`` can also
- be reached via ``templates/path/to/oscar/template.html``.
-
- Hence to customise ``base.html``, you can have an implementation like::
-
- # base.html
- {% extends 'templates/base.html' %}
-
- ...
-
- No real downsides to this one other than getting your front-end people to
- understand it.
|