我正在尝试在我的Django应用中复制此链接
Views.py
from calendar import HTMLCalendar
from datetime import date
from itertools import groupby
from django.utils.html import conditional_escape as esc
from django.shortcuts import render_to_response
from django.utils.safestring import mark_safe
class WorkoutCalendar(HTMLCalendar):
def __init__(self, workouts):
super(WorkoutCalendar, self).__init__()
self.workouts = self.group_by_day(workouts)
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.workouts:
cssclass += ' filled'
body = ['<ul>']
for workout in self.workouts[day]:
body.append('<li>')
body.append('<a href="%s">' % workout.get_absolute_url())
body.append(esc(workout.title))
body.append('</a></li>')
body.append('</ul>')
return self.day_cell(cssclass, '%d %s' % (day, ''.join(body)))
return self.day_cell(cssclass, day)
return self.day_cell('noday', ' ')
def formatmonth(self, year, month):
self.year, self.month = year, month
return super(WorkoutCalendar, self).formatmonth(year, month)
def group_by_day(self, workouts):
field = lambda workout: workout.performed_at.day
return dict(
[(day, list(items)) for day, items in groupby(workouts, field)]
)
def day_cell(self, cssclass, body):
return '<td class="%s">%s</td>' % (cssclass, body)
def calendar(request, year, month):
my_workouts = Quiz.objects.orderby('scheduled_date').filter(owner_id=request.user.pk, scheduled_date__year=year, scheduled_date__month=month).annotate(c=Sum('weight')).values('c')
print("my_workouts", my_workouts)
cal = WorkoutCalendar(my_workouts).formatmonth(year, month)
return render_to_response('classroom/teachers/graph_tot_trucks.html', {'calendar': mark_safe(cal),})
Run Code Online (Sandbox Code Playgroud)
Urls.py
path('abc/', teachers.calendar, name='cal'),
Run Code Online (Sandbox Code Playgroud)
foo.html
<head>
{{calendar}}
</head>
Run Code Online (Sandbox Code Playgroud)
当我运行它会导致
calendar()缺少2个必需的位置参数:“年”和“月”
与链接中提供的代码不同,我在做什么?
追溯
追溯:
内部35中的文件“ C:\ Users \ Sid \ Anaconda3 \ lib \ site-packages \ django \ core \ handlers \ exception.py”。response = get_response(request)
_get_response 128中的文件“ C:\ Users \ Sid \ Anaconda3 \ lib \ site-packages \ django \ core \ handlers \ base.py”。response = self.process_exception_by_middleware(e,请求)
_get_response 126中的文件“ C:\ Users \ Sid \ Anaconda3 \ lib \ site-packages \ django \ core \ handlers \ base.py”。response = wraped_callback(request,* callback_args,** callback_kwargs)
异常类型:/ shipper / abc /处的TypeError异常值:calendar()缺少2个必需的位置参数:'year'和'month'
您必须添加year和months作为参数urls.py
path('abc/<int:year>/<int:month>/', name='cal'),
Run Code Online (Sandbox Code Playgroud)
如果你想为每年和每月创建一个日历,那么你将不得不循环遍历每年和每月
years = set([quiz.scheduled_date.year for quiz in Quiz.objects.all()])
months = set([quiz.scheduled_date.month for quiz in Quiz.objects.all()])
quizzes = []
for year in years:
for month in months:
quiz = Quiz.objects.orderby('scheduled_date').filter(owner_id=request.user.pk, scheduled_date__year=year, scheduled_date__month=month).annotate(c=Sum('weight')).values('c')
quizzes.append(quiz)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |