在Django中的完整日历显示事件
我是新来的两个Django & FullCalendar所以任何援助,可以提供非常感谢。我的最终目标是使用FullCalendar在Django中显示O365日历中的事件。现在在这个阶段暂时搁置O365集成,我只是想让FullCalendar在我的模型中显示当前事件。我尝试模拟这里发布的解决方案FullCalendar in Django和这里的Fullcalendar Does not display data,但不幸的是事件没有显示。在Django中的完整日历显示事件
这里是我的代码:从我的应用程序
models.py称为 “预订”
from django.db import models
class Events(models.Model):
event_id = models.AutoField(primary_key=True)
exchange_id = models.CharField(max_length=255,null=True,blank=True)
event_start = models.DateTimeField(null=True,blank=True)
event_end = models.DateTimeField(null=True,blank=True)
event_subject = models.CharField(max_length=255,null=True,blank=True)
event_location = models.CharField(max_length=255,null=True,blank=True)
event_category = models.CharField(max_length=255,null=True,blank=True)
event_attendees = models.CharField(max_length=255,null=True,blank=True)
def __str__(self):
return self.event_subject
views.py。我已经发布了其他解决方案中与删除类别类型相关的解决方案。我还在bookings.views.py中使用了下面的脚本,但没有成功。
from bookings.models import Events
@method_decorator(login_required, name='dispatch')
class CalendarPage(TemplateView):
template_name = 'calendar.html'
def event(request):
all_events = Events.objects.all()
# get_event_types = Events.objects.only('event_category')
# if filters applied then get parameter and filter based on condition else return object
if request.GET:
event_arr = []
# if request.GET.get('event_category') == "all":
# all_events = Events.objects.all()
# else:
# all_events = Events.objects.filter(event_category__icontains=request.GET.get('event_category'))
for i in all_events:
event_sub_arr = {}
event_sub_arr['title'] = i.event_subject
start_date = date(i.event_start.date(), "%Y-%m-%d")
end_date = date(i.event_end.date(), "%Y-%m-%d")
event_sub_arr['start'] = start_date
event_sub_arr['end'] = end_date
event_arr.append(event_sub_arr)
return HttpResponse(json.dumps(event_arr))
context = {
"events":all_events,
# "get_event_types":get_event_types,
}
return render(request,'calendar',context)
和我的模板calendar.html:
<script>
$(document).ready(function() {
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
defaultView: 'month',
editable: true,
eventLimit: true,
events: [
{% for i in events %}
{
title: "{{ i.event_name}}",
start: '{{ i.start_date|date:"Y-m-d" }}',
end: '{{ i.end_date|date:"Y-m-d" }}',
},
{% endfor %}
]
});
});
</script>
我使用MySQL作为后端数据库。我为测试目的创建了一条记录。这是我希望在日历中看到记载:
# event_id, exchange_id, event_start, event_end, event_subject, event_location, event_category
1, , 2017-09-13 08:00:00.000000, 2017-09-13 09:00:00.000000, test, , all
本身的正常显示,只是没有事件的日历。如果我将测试数据硬编码到模板'calendar.html'脚本中,事件将显示在日历中。
有没有人有FullCalendar和/或Django的任何经验,并可以帮助我确定我要去哪里错了?
最后我用这个来得到它的工作:
views.py:
@method_decorator(login_required, name='dispatch')
class CalendarPage(TemplateView):
template_name = 'calendar.html'
form_class = EventForm
def get_context_data(self, **kwargs):
context = super(CalendarPage, self).get_context_data(**kwargs)
context['eventlist'] = Event.objects.all()
return context
,并在模板:
events: [
{% for i in eventlist %}
{
title: "{{ i.event_title }}",
start: '{{ i.event_start }}',
end: '{{ i.event_end }}',
location: "{{ i.event_location }}",
},
{% endfor %}
],
我认为这会对你有用。
<script>
$(document).ready(function() {
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
defaultView: 'month',
editable: true,
eventLimit: true,
events: events
});
});
</script>
_我认为这会对你有用_不是一个解释。相反,请添加一个解释来说明这将如何解决问题。 –
什么是你的模板渲染,是否正确创建了“events”? –
这包括在views.py中:从django.shortcuts导入渲染。你是这个意思吗?对不起,如果我误解您的反馈 – cr1
控制台中的任何JS错误?最有可能的是那里的东西,这可能会给我们一些线索。无论是你的代码循环都没有实际循环/ – ADyson