Django模板标签按slu

时间:2017-09-28 02:09:56

标签: python django

我在组织和活动之间有多对一的关系。一个组织可以举办许多活动。我有一个模板,用于显示每个人都可以看到按城市过滤的所有事件。但我希望组织详细信息视图显示仅属于特定组织的事件。

models.py

class Organization(models.Model):
  name = models.Charfield(max_length=27)
  slug = models.SlugField(max_length=25, null=True, blank=True)
  [...]

  def __unicode__(self):
    return self.name

class Events(models.Model):
  org = models.ForeignKey(Organization, on_delete=models.CASCADE, default=1)
  time = models.DateTimeField(null=True, blank=True)
  city = models.CharField(
    max_length=25,
    choices = CITY_CHOICES,
    default = 'NY'
    )
  [...]
  def __unicode__(self):
    return '%s %s' % (self.org, self.time)

我使用此模板标记按城市过滤事件(纽约为此):

@register.inclusion_tag('mysite/event_list.html')
def event_ny_tag(event):
    return {'events': Events.objects.filter(linn='NY')}

url.py

urlpatterns = [
  url(r'^$', HomePageView.as_view(), name='home'),
  url(r'^organizations/$', OrganizationList.as_view(), name='organizations'),
  url(r'^events/$', EventList.as_view(), name='events'),
  url(r'^(?P<slug>[-\w]+)/$', OrgDetailView.as_view(), name='org_detail'),
]

但是,如何仅由一个特定组织过滤事件?只有两个城市,但有20个组织。没有硬编码怎么办呢?有一个slu ??吗?

这不是复制粘贴。只是一个类似于我的示例代码。

1 个答案:

答案 0 :(得分:1)

由于事件有外键组织。您可以在其详细视图模板中获取与组织关联的事件列表,如下所示:

  {% for event in organization.events_set.all %}
        {{ event }}
  {% endfor %}

更新:要根据学期进行过滤,您可以使用自定义模板过滤器,将学期作为参数与事件列表一起传递,如下所示:

  @register.filter
  def semester(events, sem):
      return events.filter(semester=sem)

并在模板中执行此操作

  <!--Semester 1-->
  {% for event in organization.events_set.all|semester:"sem1" %}
       {{ event }}
  {% endfor %}