How can I get the object count for a model in Django's templates?

If Books has a ForeignKey to Sections, then Django will automatically create a reverse relationship from Sections back to Books, which will be called books_set. This is a Manager, which means you can use .filter(), .get() and .count() on it - and you can use these in your template.

{{ sec.books_set.count }}

(By the way, you should use singular nouns for your model names, not plurals - Book instead of Books. An instance of that model holds information for one book, not many.)


Additionally to what Daniel said, Django creates reverse relationships automatically (as Daniel said above) unless you override their names with the related_name argument. In your particular case, you would have something like:

class Book(models.Model):
    section = models.ForeignKey(Section, related_name="books")

Then you can access the section's books count in the template by:

{{ sec.books.count }}

As you intimated in your question.


As for a 2019 answer. I would suggest making use of related_name while making your ForeignKey to look like that:

section = models.ForeignKey(Section, on_delete=models.SET_NULL, related_name='books')

Then you can use it as follows:

{{ section.books.count }} 

or

{{ section.books|length }}