簡體   English   中英

Django模板標簽按Slug篩選

[英]Django template tags filter by slug

我在組織和事件之間有着多對一的關系。 一個組織可以發生許多事件。 我有一個模板,用於顯示每個人都能看到的按城市過濾的事件。 但是我希望組織詳細信息視圖顯示僅屬於特定組織的事件。

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)

我使用此模板標記按城市過濾事件(此事件為NY):

@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個組織。 如何不對其進行硬編碼? a?

這不是復制粘貼。 只是類似於我的示例代碼。

自從有了外鍵組織的事件。 您可以在組織的詳細信息視圖模板中獲取與組織關聯的事件列表,如下所示:

  {% 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 %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM