【问题标题】:Using FullCalendar with Django Views在 Django 视图中使用 FullCalendar
【发布时间】:2013-07-31 02:00:09
【问题描述】:

我正在尝试在我的网站上实现 FullCalendar,但对此有点陌生,不太确定如何格式化我想做的事情。我有一个视图,它将获取所有单个用户的事件。我想参加这些活动并用它们填充日历。我的问题是我不知道在视图中返回什么或如何在 JavaScript 函数中处理该返回值。这是我现在拥有的:

查看:

def calEvents(request):

    user = request.user.get_profile()
    eventList = user.eventList
    ownedList = user.ownedEvent

    events = #Part I'm having trouble with

    return HttpResponse(events)

eventListownedEvent 跟踪用户的所有事件。他们有与之相关的姓名/日期。我不明白的是我需要将所有这些信息放入我的 HttpResponse 中返回的格式。

我的 JavaScript 函数是:

$(document).ready(function() {


    $('#calendar').fullCalendar({
      eventSources: [
        {
            url: '/calEvents/',
            editable: false,
        }
      ]
    });

});

我告诉它转到 Django 视图,但在那之后我迷路了。提前非常感谢!

【问题讨论】:

    标签: django django-views fullcalendar


    【解决方案1】:

    我通过在我的 Django 视图中构建一个字典列表来做到这一点,至少设置“标题”和开始时间的必填字段,然后使用 simplejson.dumpscls=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: __init__() got an unexpected keyword argument 'namedtuple_as_object'。谷歌搜索后,我看到它提到了在 Django 中使用时的一些向后兼容性问题。有解决办法吗?
    • 你使用的是哪个版本的 Django?
    • 只使用没有编码器的 json.dumps 让它工作。谢谢!
    • 有趣 - 在我的旧版本中,默认编码器无法处理 datetimes,这是使用 Django 特定编码器的动机。标准 Python 库的文档没有报告它默认处理 datetimes,所以我很惊讶它在不添加某种自定义编码器的情况下工作。
    • stackoverflow.com/questions/455580/… 当您确实需要添加它时,它有多个很好的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多