Django Templates: Best Practices
Table of Contents
- Introduction to Django templates
- Simple start with Django templates
- Project structure
- How inheritance works for Django templates
- Handling querysets
- URL namespacing
- Takeaways
Introduction to Django templates
Django, as a web framework, uses templates as a way of producing static HTML from the output of a Django view. In practice, Django’s templates are simply HTML files, with some special syntax and a set of tools which lets Django render the HTML page on-the-fly for the visiting user. Templates are highly customizable, but are meant to be simple, with most of the “heavy” logic going into the view. Let’s dive deeper and learn some standard ways of dealing with common problems.
Simple start with Django templates
By default, Django comes with a ton of built-in template tags and filters that help us perform repeatable template tasks throughout our apps.
Tags: Tags provide arbitrary logic in the rendering process. Django leaves this definition fairly vague, but tags are able to output content, grab content from the database (more on this later), or perform control operations like if statements or for loops.
Examples of tags:
{% firstof user.is_active user.is_staff user.is_deleted %}
The firstof
tag will output the first provided variable which evaluates to True
. This is a good replacement for a large if/elif/elif/elif/elif
block that’s just evaluating on truthiness within your Django templates.
<ul>
{% for product in product_list %}
<li>{{ product.name }}: ${{ product.price }}</li>
{% endfor %}
</ul>
The for
tag in Django will loop over each item in a list, making that item (product, in this case) available in the template context before the tag is closed with endfor
. This is a widely used pattern when working with lists of Django model instances which have been returned from the view.
Filters: Filters transform the values of variables and arguments. Filters would be used in tasks like rendering a string in uppercase or formatting a date string into a user’s region.
Examples of filters:
{{ value|date:'D d M Y' }}
The date filter will format a date (value
, in the example) given a string with some format characters. The example would output the string: Mon 01 Apr 2019
.
{{ value|slugify }}
The slugify filter will convert the spaces of a string into hyphens and convert the string to lowercase, among other things. The output of this example would-look-something-like-this
.