INME
INME

Reputation: 59

How to show objects count in Django template

I have a program that post some places and shows them in a HTML template, but I also want to show the users many of these places I have and I'm wondering how I can reach this.

I have in my models.py:

class Places(models.Model):
     name=models.CharField(max_length=100)
     text=models.TextField()
     website=models.URLField()
     published_date = models.DateTimeField(
            blank=True, null=True)

def __str__(self):
    return self.name

def publish(self):
        self.published_date = timezone.now()
        self.save()

in views.py:

def places(request):
     places=Places.objects.order_by('-published_date')[:10]
     return render(request, 'templates/places.html', {'places':places})

and the html template:

<div class="container">
<h2>Places<span class="badge"> HERE'S WHERE I WANT THE NUMBER OF PLACES</h2>
</div>

I hope you can help me out. Thanks for the answers

Upvotes: 5

Views: 12865

Answers (3)

Semix
Semix

Reputation: 11

On the htmlpage;

{% if products %}
    Number of products: {{ products|length }}
{% else %}
    No products.
{% endif %}

Upvotes: 0

Paulo Pessoa
Paulo Pessoa

Reputation: 2569

You can use this template filter:

{{ places|length }} 

Documentation link length

Don’t overuse count() and exists()

Optimization

Upvotes: 10

Christine Sch&#228;pers
Christine Sch&#228;pers

Reputation: 1318

You can't get the count of objects in django's template without writing a custom tag.

Even if you could however it would be 10, since you especially said places to only include 10 objects.

You should instead pass places_count via the context to the template:

def places(request):
    places = Places.objects.order_by('-published_date')[:10]
    places_count = Places.objects.count()
    return render(
        request, 'templates/places.html', {'places':places, 'places_count': places_count}
    )

And then in the template:

<div class="container">
    <h2>Places <span class="badge">{{ places_count }}</span></h2>
</div>

Upvotes: 6

Related Questions