【问题标题】:How to find one nearest date in HTML-Calendar django如何在 HTML-Calendar django 中找到最近的日期
【发布时间】:2021-08-04 19:18:30
【问题描述】:

我想实现一个活动日历。我面临着显示最接近今天日期的事件的问题。为了找到最近的日期,我在查询集中使用 __gte,在查询集找到所有最近的日期后,我想用不同的颜色突出显示第一个日期,这是我的解决方案,你能告诉我我做错了什么吗?

这是我的模特

class Events(models.Model):
   title = models.CharField(max_length=100)
   slug = models.SlugField()
   start_time = models.DateTimeField()
   end_time = models.DateTimeField()



   def __str__(self):
      return self.title

   @property
   def get_html_url(self):
      url = reverse('cal:events', args=(self.slug,))
      return f'<a href="{url}">'

还有我的 HTMLCalendar

from datetime import datetime, timedelta
from calendar import HTMLCalendar

from .models import Events


class Calendar(HTMLCalendar):

  def __init__(self, year=None, month=datetime.now().month):
        self.year = year
        self.month = month
        super(Calendar, self).__init__()

# formats a day as a td
# filter events by day

def formatday(self, day, events):
    events_per_day = events.filter(start_time__day=day)
    d = ''
    if Events.objects.filter(start_time__day=day, start_time__month=self.month).exists():
        for event in events_per_day:
            d += f'{event.get_html_url}'

        if day != 0:
            ev = Events.objects.filter(start_time__gt=datetime.now()).first()
            if ev:
                return f"<td>{d}<span style='color:red;' class='date'>{day}</span></a></td>"
            else:
                return f"<td>{d}<span style='color:aliceblue;' class='date'>{day}</span></a></td>"
        return '<td></td>'
    else:
        if day != 0:
            return f"<td><b><span class='date'>{day}</span>  </b></td>"
        return '<td></td>'

# formats a week as a tr
def formatweek(self, theweek, events):
    week = ''
    for d, weekday in theweek:
        week += self.formatday(d, events)
    return f'<tr> {week} </tr>'

# formats a month as a table
# filter events by year and month
def formatmonth(self, withyear=True, ):
    events = Events.objects.filter(start_time__year=self.year, start_time__month=self.month)

    cal = f'<table border="0" cellpadding="0" cellspacing="0" class="calendar">\n'
    cal += f'{self.formatmonthname(self.year, self.month, withyear=withyear)}\n'
    cal += f'{self.formatweekheader()}\n'
    for week in self.monthdays2calendar(self.year, self.month):
        cal += f'{self.formatweek(week, events)}\n'
    return cal

我的解决方案是格式 day () 函数我正在执行一个查询,如果有第一个元素,我想用红色突出显示它并用不同的颜色绘制所有其他元素

【问题讨论】:

    标签: python django django-queryset event-calendar


    【解决方案1】:

    我会考虑将格式移至您的模板。然后,您可以使用红色格式为第一个变量提供服务,并使用其他格式选项循环遍历剩余值。

    使用视图按照您希望使用的顺序在模板中生成您需要的数据。处理模板中的演示文稿。

    【讨论】:

      猜你喜欢
      • 2016-09-17
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多