【问题标题】:using jquery fullcalendar in django app在 django 应用程序中使用 jquery fullcalendar
【发布时间】:2012-04-09 07:00:09
【问题描述】:

我正在使用fullcalendar jquery 库在我的django 博客应用程序页面中显示一个日历。我有一些Posts 由登录user 创建并想向他展示一个日历视图每个月的,number of posts 由他在每一天发布,如果在某一天没有发布,则为 0。

我已将javascriptcss 文件包含在fullcalendar 库中,并且我的页面已成功显示日历。但是如何将数据从django 视图传递到日历?查了html页面的源码,发现日历是用html表格做成的。

有没有人做过类似的事情?你能建议如何在每个日历日单元格上显示帖子数量吗?

我试着想一个这样的解决方案, 对于特定月份,我可能需要得到一个dict,其中键是天(例如:4 月 1 日),值是

len(Post.objects.filter(month='april' ,day='1'))

并将这个dict 传递给响应(呈现上面的html页面)。但是我怎样才能让日历从这个dict中获取每个值并将其显示在适当的单元格中?

如果我的想法有问题,请纠正我。

我选择了fullcalendar 脚本,因为它看起来不错..但我不需要任何与事件相关的函数..所以我对更简单的灵魂持开放态度。如果你认为 fullcalendar 太过分了,请建议一个更简单的替代方案

【问题讨论】:

    标签: jquery django calendar


    【解决方案1】:

    您需要提供完整的日历“事件”数据,这可能是帖子的数量,并且将呈现为事件。根据文档,它可能采用不同的格式,例如 js 数组。您只需将该数据传递到模板中。模板可能如下所示:

    <script>
        ...
        $('#calendar').fullCalendar({
            events: {{ posts_counts|safe }}
        });
        ...
    </script>
    

    posts_counts 是全日历支持格式的字典数组,请看here

    视图可能如下所示。这是一个粗略的例子,只是为了展示它是如何完成的:

    def calendar(request):
        posts_counts = []
        for i in (1, 31):
            posts_counts.append({'title': len(Post.objects.filter(month='april', day=i)),
                                 'start': '2012-04-%d' % i,
                                 'end': '2012-04-%d' % i})
        return render(request, 'calendar_template.html',
                      {'posts_counts': simplejson.dumps(posts_counts)})
    

    然后,您页面上的 fullcalendar 应该使用帖子数作为事件进行初始化。然后您可能可以自定义日历外观,禁用事件拖放等。

    找到帖子数量的解决方案会生成大量 SQL 查询,最好想出一个更好的解决方案。

    【讨论】:

    • 最后我得到了这个工作..不得不做一些改变,而不是 'title': len(Post.objects.filter(...),...} 我用了 'title ': str(Post.objects.filter(...).count()) 。我认为 'title' 的值需要是一个字符串。所以我在 count() 返回的 int 值上使用了 str()
    • 好消息 :) 是的,这可能是个问题,我不确定它是否将 int 理解为标题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    相关资源
    最近更新 更多