Django's template context is a dict mapping names to values. Querysets behave like lazy lists. JSON APIs serialize dicts. Mastering collections is essential.
Dictionaries as context
context = {
"articles": Article.objects.filter(published=True),
"page_title": "Blog home",
}
Templates access keys: {{ page_title }}, {% for article in articles %}.
Lists and querysets
Querysets support filtering, slicing, and ordering—similar to chaining list operations but executed as SQL. list(queryset) forces evaluation when you need a concrete list.
Important interview questions and answers
- Q: Dict vs model instance in templates?
A: Models expose attributes (article.title); dicts use keys—both work in Django templates. - Q: When is a queryset evaluated?
A: On iteration, slicing,len(),list(), or printing—until then it is lazy SQL. - Q: Mutable default dict pitfall?
A: Never usedef f(x={})—shared mutable defaults cause bugs; Django model field defaults use callables likedictorlistcorrectly viadefault=list.
Self-check
- What is a view's context dict for?
- When does a queryset hit the database?