В дополнение к тому, что предлагает @Wade, вы также можете добавить метод к вашей модели категории для возврата продуктов, которые он имеет.
Пример ..
class Category:
...
...
def get_products(self):
return Product.objects.filter(category=self)
Тогда в шаблоне вы можете ..
{% for category in categories %} # assuming categories is passed from the view.
{% for product in category.get_products %}
...