【发布时间】:2016-12-13 16:21:16
【问题描述】:
我正在打印与某些过滤器匹配的啤酒列表,以及每个都可以点击的酒吧。这些是多对多关系。我需要过滤此条形列表以仅显示处于给定状态的条形。
我可以使用模板中的 if 语句来实现这一点,但是我无法将列表格式化为在最后一项之前使用带有“和”的逗号(如 https://stackoverflow.com/a/3649002/6180992),因为我不知道列表。
我已经想到了三种可能的方法,但无法使任何一种工作:
- 过滤与酒吧相关的字段以及视图中的啤酒
- 在模板中组装列表,然后再次循环打印它
- 过滤模板中的条形相关字段
以下是相关的代码部分:
models.py
class Bar(models.Model):
bar = models.CharField(max_length=200, default='FinshnPig')
state = models.CharField(max_length=200,default='NY')
def __str__(self):
return self.bar
class Meta:
ordering = ('bar','region')
class Tap(models.Model):
bar = models.ManyToManyField(Bar,default='FinshnPig')
brewery = models.CharField(max_length=200)
beer = models.CharField(max_length=200)
state = models.CharField(max_length=200, default='NY')
def __str__(self):
return self.beer
views.py
f = TapFilter(request.GET, queryset=Tap.objects.filter(state="VIC"))
模板:
{% for tap in filter %}
<li>
<b>{{ tap.beer }}</b>
<em>{{ tap.brewery }}</em>
@{% for bar in tap.bar.all %}{% if bar.state == "VIC" %}{{ bar.bar }}</b>{% endif %}{% include "taplists/comma.html" %}{% endfor %}
</li>
{% endfor %}
【问题讨论】:
标签: django