在模板中使用{%for%}时有没有办法过滤? 例如,我得到了这个:
型号:
class Options(models.Model):
option = models.CharField(max_length=50)
class Brand(models.Model):
brand = models.CharField()
class Products(models.Model):
type = models.ForeignKey(Options)
brand = models.ManyToManyField(Brands)
在模板中:
{% for article in Options %}
{% for sth in products where type=article.0 %} <--- Is this possible ?
I need to make it iterable
//Do something
{% endfor %}
{% end for %}
有办法吗? 如果您不明白某事,请问:)
答案 0 :(得分:1)
我认为你是从错误的角度接近这个。像这样的逻辑应该在视图中。
您似乎希望按类型对产品进行分组,因此无论您在产品的视图中指定查询集,请使用order by。
queryset = Products.objects.filter(filters_here_if_you_need=any).order_by("type__option")
然后在你的模板中你只需要内循环
{% for sth in products %}
//Do something
{% endfor %}
现在您的产品将通过选项订购。
或者我错过了什么?
答案 1 :(得分:0)
实际上有很多选择
{% for thing in things %}
{% for product in products.all %}
{% if thing.type == product.type %}
<!-- do stuff -->
{% else %}
<!-- pass -->
{% endif %}
{% endfor %}
{% end for %}
或
{% for thing in things %}
{% for product in products.all %}
{% ifequal thing.type product.type %}
<!-- do stuff -->
{% else %}
<!-- pass -->
{% endifequal %}
{% endfor %}
{% end for %}
您可以编写SimpleTag来直接在您的模板中过滤您的相关经理,但我不会推荐它。您还可以向采用参数的模型中的任一个添加属性,并使用简单标记来提供模板中的方法。
如果您的数据不是那么动态,您也可以直接将正确的context返回到您的模板。