Template.render(context=None, request=None)
Renders this template with a given context.
If context
is provided, it must be a dict
. If it isn’t provided, the engine will render the template with an empty context.
If request
is provided, it must be an HttpRequest
. Then the engine must make it, as well as the CSRF token, available in the template. How this is achieved is up to each backend.
Here’s an example of the search algorithm. For this example the TEMPLATES
setting is:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ '/home/html/example.com', '/home/html/default', ], }, { 'BACKEND': 'django.template.backends.jinja2.Jinja2', 'DIRS': [ '/home/html/jinja2', ], }, ]
If you call get_template('story_detail.html')
, here are the files Django will look for, in order:
-
/home/html/example.com/story_detail.html
('django'
engine) -
/home/html/default/story_detail.html
('django'
engine) -
/home/html/jinja2/story_detail.html
('jinja2'
engine)
If you call select_template(['story_253_detail.html', 'story_detail.html'])
, here’s what Django will look for:
-
/home/html/example.com/story_253_detail.html
('django'
engine) -
/home/html/default/story_253_detail.html
('django'
engine) -
/home/html/jinja2/story_253_detail.html
('jinja2'
engine) -
/home/html/example.com/story_detail.html
('django'
engine) -
/home/html/default/story_detail.html
('django'
engine) -
/home/html/jinja2/story_detail.html
('jinja2'
engine)
When Django finds a template that exists, it stops looking.
Tip
You can use select_template()
for flexible template loading. For example, if you’ve written a news story and want some stories to have custom templates, use something like select_template(['story_%s_detail.html' % story.id,
'story_detail.html'])
. That’ll allow you to use a custom template for an individual story, with a fallback template for stories that don’t have custom templates.
It’s possible – and preferable – to organize templates in subdirectories inside each directory containing templates. The convention is to make a subdirectory for each Django app, with subdirectories within those subdirectories as needed.
Do this for your own sanity. Storing all templates in the root level of a single directory gets messy.
To load a template that’s within a subdirectory, just use a slash, like so:
get_template('news/story_detail.html')
Using the same TEMPLATES
option as above, this will attempt to load the following templates:
-
/home/html/example.com/news/story_detail.html
('django'
engine) -
/home/html/default/news/story_detail.html
('django'
engine) -
/home/html/jinja2/news/story_detail.html
('jinja2'
engine)
In addition, to cut down on the repetitive nature of loading and rendering templates, Django provides a shortcut function which automates the process.
Please login to continue.