在Django视图中使用FullCalendar
我正在尝试在我的网站上实现FullCalendar,但我对此有点陌生,不太确定如何格式化我想要做的事情。我有一个视图可以抓取每个用户的所有事件。我想把这些事件记录下来,并用它们填充日历。我的问题是,我不知道在视图中返回什么,也不知道如何在JavaScript函数中处理该返回值。以下是我现在拥有的: 视图:在Django视图中使用FullCalendar,django,django-views,fullcalendar,Django,Django Views,Fullcalendar,我正在尝试在我的网站上实现FullCalendar,但我对此有点陌生,不太确定如何格式化我想要做的事情。我有一个视图可以抓取每个用户的所有事件。我想把这些事件记录下来,并用它们填充日历。我的问题是,我不知道在视图中返回什么,也不知道如何在JavaScript函数中处理该返回值。以下是我现在拥有的: 视图: eventList和ownedEvent跟踪用户的所有事件。它们具有与之关联的名称/日期。我不明白的是,我需要将所有这些信息以何种格式返回到我的HttpResponse中 我的JavaScri
eventList
和ownedEvent
跟踪用户的所有事件。它们具有与之关联的名称/日期。我不明白的是,我需要将所有这些信息以何种格式返回到我的HttpResponse中
我的JavaScript函数是:
$(document).ready(function() {
$('#calendar').fullCalendar({
eventSources: [
{
url: '/calEvents/',
editable: false,
}
]
});
});
我告诉它去Django景观,但之后我迷路了。非常感谢 我在Django视图中构建了一个字典列表,设置了“title”和开始时间的最少必填字段,然后使用
simplejson.dumps
和cls=DjangoJSONEncoder
返回json
from django.core.serializers.json import DjangoJSONEncoder
def calEvents(request):
# as above, then:
events = []
for event in eventList:
events.append({'title': event.name, 'start': event.start})
# something similar for owned events, maybe with a different className if you like
return HttpResponse(simplejson.dumps(events, cls=DjangoJSONEncoder), mimetype='application/json')
您还可以根据get请求提供的开始和结束时间限制返回的事件:
def calEvents(request):
user = request.user.get_profile()
start_timestamp = request.GET.get('start')
end_timestamp = request.GET.get('end')
start_datetime = datetime.datetime.fromtimestamp(float(start_timestamp))
end_datetime = datetime.datetime.fromtimestamp(float(end_timestamp))
eventList = user.eventList.filter(start_time__lte=end_datetime, end_time__gte=start_datetime)
我忽略了时间戳转换的错误处理-fullcalendar将为您提供适当的值,但最好考虑错误输入的可能性。我正在对事件模型的结构进行假设。这导致了
TypeError:\uuuu init\uuuuu()得到了一个意外的关键字参数“namedtuple\u as\u object”
。在谷歌搜索之后,我看到它在Django中使用时提到了一些向后兼容性问题。有解决方法吗?您使用的是哪个版本的Django?只使用json.dumps而不使用编码器。谢谢有趣的是,在我的旧版本中,默认编码器无法处理datetime
s,这就是使用Django特定编码器的动机。默认情况下,标准Python库的文档不会报告它处理datetime
s,因此我很惊喜地发现它在不添加某种自定义编码器的情况下工作。当你需要添加它时,它有多个好的答案。
def calEvents(request):
user = request.user.get_profile()
start_timestamp = request.GET.get('start')
end_timestamp = request.GET.get('end')
start_datetime = datetime.datetime.fromtimestamp(float(start_timestamp))
end_datetime = datetime.datetime.fromtimestamp(float(end_timestamp))
eventList = user.eventList.filter(start_time__lte=end_datetime, end_time__gte=start_datetime)