Variables you have provided in your view context can be accessed using double-brace notation:
In your views.py:
class UserView(TemplateView):
""" Supply the request user object to the template """
template_name = "user.html"
def get_context_data(self, **kwargs):
context = super(UserView, self).get_context_data(**kwargs)
context.update(user=self.request.user)
return context
In user.html:
<h1>{{ user.username }}</h1>
<div class="email">{{ user.email }}</div>
The dot notation will access:
user.username will be {{ user.username }}request.GET["search"] will be {{ request.GET.search }}users.count() will be {{ user.count }}Template variables cannot access methods that take arguments.
Variables can also be tested and looped over:
{% if user.is_authenticated %}
{% for item in menu %}
<li><a href="{{ item.url }}">{{ item.name }}</a></li>
{% endfor %}
{% else %}
<li><a href="{% url 'login' %}">Login</a>
{% endif %}
URLs are accessed using {% url 'name' %} format, where the names correspond to names in your urls.py.
{% url 'login' %} - Will probably render as /accounts/login/
{% url 'user_profile' user.id %} - Arguments for URLs are supplied in order
{% url next %} - URLs can be variables