FullCalendar i django
Chcę użyć wtyczki jQuery fullcalendar w moim projekcie django. Mam model wejścia
class Entry(models.Model):
date = models.DatetimeField()
ma tylko atrybut daty. Wiem, że fullcalendar używa początku i końca, ale też do tego dojdzie :)
mój widok ajax jest następujący
def eventsFeed(request):
from django.utils.timezone import utc
from django.core.serializers.json import DjangoJSONEncoder
if request.is_ajax():
print 'Its ajax from fullCalendar()'
try:
start = datetime.fromtimestamp(int(request.GET.get('start', False))).replace(tzinfo=utc)
end = datetime.fromtimestamp(int(request.GET.get('end',False)))
except ValueError:
start = datetime.now.replace(tzinfo=utc)
end = start + timedelta(days=7)
entries = Entry.objects.filter(date__gte=start).filter(date__lte=end)
print entries
json_list = []
for entry in entries:
id = entry.id
title = entry.title
start = entry.date.strftime("%Y-%m-%dT%H:%M:%S")
allDay = False
json_entry = {'id':id, 'start':start, 'allDay':allDay, 'title': title}
json_entry = json.dumps(json_entry, cls=DjangoJSONEncoder)
json_list.append(json_entry)
return HttpResponse(json_list, content_type='application/json')
mój szablon.html
<div id="calendar"></div>
<script>
$(document).ready(function (){
$("#calendar").fullCalendar({
events:"calendar/eventfeeds/"
});
});
Muszę teraz wyrazić sprzeciw wobec testów w mojej bazie danych w dzisiejszym dniu i jeszcze czterech w poprzednich dniach. Mam także włączoną strefę czasową, więc moje modele przechowują świadome obiekty datetime
Ale fullcalendar nie pokazuje wydarzeń. Pełny kalendarz rozpoczyna się od dzisiejszej daty (25 listopada). Więc mam to
start, end = 2013-10-27 00:00:00+00:00, 2013-12-08 00:00:00
(dlaczego to jest od kiedy dostałem widok z listopada?)
[<Entry: doctor - Title>, <Entry: doctor - New entry>, <Entry: doctor - Entry3>,
,,]
normalnie pobiera wszystkie wpisy, ponieważ daty rozpoczęcia i zakończenia nie są tymi, które powinny być (pamiętaj widok z listopada)
i json_list
['{"start": "2013-11-20T17:30:00", "allDay": false, "id": 1, "title": "Title"}',
'{"start": "2013-11-20T17:30:00", "allDay": false, "id": 2, "title": "New entry
"}', '{"start": "2013-11-20T17:30:00", "allDay": false, "id": 3, "title": "Entry
3"}', '{"start": "2013-11-21T22:00:00", "allDay": false, "id": 4, "title": "test
"}', '{"start": "2013-11-25T13:00:00", "allDay": false, "id": 5, "title": "New e
ntry"}', '{"start": "2013-11-25T09:52:00", "allDay": false, "id": 6, "title": "N
ew entry 2"}']
Zmieniono datę rozpoczęcia w formacie ISO8601. Jeśli chodzi o datę końcową, w dokumentacji jest napisane, że jeśli obiekt zdarzenia nie ma enddate, używa daty końcowej jako 120 minut po dacie rozpoczęcia. Jest więc automatycznie wypełniany. Ale wydarzenia nie renderują ... Więc co robię źle?
EDIT1: przejście do kalendarza / eventfeed / Dostaję pustą stronę. Znaczenie obiektów json nie jest zwracane .... ?? EDIT2: Myliłem się, eventfeeds zwraca json normalnie, po prostu nie przekazałem żadnych parametrów GET, gdy zaznaczyłem to w EDIT1