使用django构建html日历视图

时间:2011-07-25 17:50:48

标签: python django

我正在尝试使用django构建日历视图,并尝试避免在视图中编写任何html标记。我发现了一个帮助我到达那里的代码,

from datetime import date, datetime, timedelta, time
import calendar

year=2011
month=12
change=None

# init variables
cal = calendar.Calendar()
month_days = cal.itermonthdays(year, month)
lst = [[]]
week = 0

# make month lists containing list of days for each week
# each day tuple will contain list of entries and 'current' indicator
for day in month_days:
    lst[week].append((day))
    if len(lst[week]) == 7:
        lst.append([])
        week += 1

在我看来,我做了以下

<div class="calendar_panel_bottom_noborder">
    <span class="month">Juny 2011</span>
    <span class="day_name">S</span>
    <span class="day_name">M</span>
    <span class="day_name">T</span>
    <span class="day_name">W</span>
    <span class="day_name">T</span>
    <span class="day_name">F</span>
    <span class="day_name">S</span>
    {% for week in month_days %}

        {% for day in week %}
            <span class="date">{{ day }}</span>
        {% endfor %}

    {% endfor %}
    <div class="clear"></div>


</div>

现在,上面的代码是根据月份和年份参数打印日历,但它们看起来是错误的。当我将它与日历进行比较时,使用2011年12月,本月的第一天从周四开始,而日历则从周三开始。任何人都可以帮助指出我在这里做错了吗?

更新

似乎问题来自itermondaydays。我试着做以下

>>> month_days = cal.itermonthdays(2011, 12)
>>> for day in month_days:
...  print day
... 
0
0
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
0

我不知道是否应该更改某种设置或以不同方式启动课程。但是,输出应该以4个零开始,并且根据我的PC日历结束,它表示2011年12月开始于星期四,也就是一周的第5天,因此在计数开始之前应该有4个零。关于如何解决这个问题的任何建议?

3 个答案:

答案 0 :(得分:3)

您需要包含

cal.setfirstweekday(6)

之前

monthdays = ...

根据python documentation,......

  

默认情况下,这些日历将星期一作为一周的第一天,   和星期日是最后一次(欧洲会议)。

答案 1 :(得分:1)

在我看来,你的问题只是itermonthdays从星期一而不是星期日开始。您可以通过暂时替换

来确认
itermonthdays

itermonthdates

lst[week].append(day)

lst[week].append(day.strftime("%A")))

这应该暂时将日期代码替换为星期几的名称。

修改:问题的一个可能解决方案是将lst初始化为[[0]],然后在循环结束时设置lst=lst[:-1]

答案 2 :(得分:0)

  

当我将它与日历进行比较时,使用2011年12月,本月的第一天从星期四开始,而日历则从星期三开始。任何人都可以帮助指出我在这里做错了吗?

根据我的Windows日历,2011年12月的第一天是星期四,我对你不好了。