2017-09-15 45 views
0

我是新來的兩個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的任何經驗,並可以幫助我確定我要去哪裏錯了?

+0

什麼是你的模板渲染,是否正確創建了「events」? –

+0

這包括在views.py中:從django.shortcuts導入渲染。你是這個意思嗎?對不起,如果我誤解您的反饋 – cr1

+0

控制檯中的任何JS錯誤?最有可能的是那裏的東西,這可能會給我們一些線索。無論是你的代碼循環都沒有實際循環/ – ADyson

回答

0

最後我用這個來得到它的工作:

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 %} 
], 
0

我認爲這會對你有用。

<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> 
+1

_我認爲這會對你有用_不是一個解釋。相反,請添加一個解釋來說明這將如何解決問題。 –

相關問題