2013-08-12 2 views
0

Мне нужен календарь для отображения записей в расписании. Я использовал this guide для записи календаря django, но он не охватывает заключительный этап, то есть фактически передает URL-адрес в представление и рендеринг календаря. На основе догадки пошла не так, мой вход URLconf теперь стал этим уродством:Django Calendar View - Как передать URL-адрес

 url(r'^calendar/(?P<pk>\d+)/(?P<start__year>\d+)/(?P<start__month>\d+)/$', calendar(request, year, month)), 

Самого видом таким образом:

def calendar(request, year, month): 
    my_timesheet = Timesheet.objects.order_by('start').filter(start__year=year, start__month=month) 
    cal = TimesheetCalendar(my_timesheet).formatmonth(year, month) 
    return render_to_response('calendar.html', {'calendar':mark_safe(cal),}) 

и поколение каландра:

class TimesheetCalendar(HTMLCalendar): 
    def __init__(self, Timesheet): 
     super(TimesheetCalendar, self).__init__() 
     self.Timesheet = self.group_by_day(Timesheet) 

    def formatday(self, day, weekday): 
     if day != 0: 
      cssclass = self.cssclasses[weekday] 
      if date.today() == date(self.year, self.month, day): 
       cssclass += ' today' 
      if day in self.Timesheet: 
       cssclass += ' filled' 
       body = ['<ul>'] 
       for timesheet in self.Timesheet[day]: 
        body.append('<li>') 
        body.append(esc(Timesheet.activity)) 
        body.append('</li>') 
       body.append('</ul>') 
       return self.day_cell(cssclass, '%d %s' % (day, ''.join(body))) 
      return self.day_cell(cssclass,day) 
     return self.daycell('noday','&nbsp;') 

    def formatmonth(self, year, month): 
     self.year, self.month = year, month 
     return super(TimesheetCalendar, self).formatmonth(year, month) 

    def group_by_day(self, Timesheet): 
     field = lambda Timesheet: Timesheet.start.day 
     return dict(
      [(day, list(items)) for day, items in groupby(Timesheet, field)] 
      ) 
    def day_cell(self, cssclass, body): 
     return '<td class="%s">%s</td>' %(cssclass, body) 

Что я должен сделать, чтобы правильно передать эти атрибуты, месяц и год, с поля даты start в моей модели?

ответ

1

Я думаю, что второй аргумент url должен быть строкой, представляющим собой функцию или объект функции:

url(r'^calendar/(?P<pk>\d+)/(?P<start__year>\d+)/(?P<start__month>\d+)/$', calendar)

Кроме того, когда вы использовали именованные группы в вашей URL (т. Е start__year, start_month) они передаются к вашей функции вида как kwargs не как позиционные аргументы

def calendar(request, pk, start__year, start__month): 
    pass