You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FullCalendar+Flask点击日期跳转失败:日期参数未传递致404

Flask + FullCalendar 点击日期跳转参数丢失导致404问题解决

问题描述

在Flask项目中集成FullCalendar,期望点击日历上的日期时跳转到对应日期的day页面,但跳转后URL仅为localhost:5000/day/(触发404错误),而非预期的localhost:5000/day/2023-03-09。经测试:

  • 点击日期时控制台能正常打印出日期字符串
  • 手动访问带日期参数的URL可正常显示页面
    确定问题为日期参数未正确传递到跳转URL中。

问题原因

核心错误出在前端模板的JavaScript代码中:url_for是Flask的后端模板渲染函数,在页面加载时就会执行,而date是前端点击事件触发后才生成的JavaScript变量,后端渲染模板时根本无法识别这个前端变量,因此生成的URL缺失日期参数,仅为/day/。

解决方案

修改前端cal.html中的跳转逻辑,将后端生成的基础URL与前端获取的日期参数拼接,具体代码如下:

修改后的cal.html

<!DOCTYPE html>
<html lang='en'>
  <head>
    <meta charset='utf-8' />
    <script src='https://cdn.jsdelivr.net/npm/fullcalendar@6.1.4/index.global.js'></script>
    <script>
      document.addEventListener('DOMContentLoaded', function() {
        var calendarEl = document.getElementById('calendar');
        // 先通过模板渲染获取day路由的基础路径(末尾已预留拼接位置)
        const dayBaseUrl = "{{ url_for('cal.day', date='') }}";
        var calendar = new FullCalendar.Calendar(calendarEl, {
          initialView: 'dayGridMonth',
          dateClick: function(info) {
            const selectedDate = info.dateStr;
            // 将日期参数拼接到基础URL后
            window.location.href = dayBaseUrl + selectedDate;
          },
        });
        calendar.render();
      });
    </script>
  </head>
  <body>
    <div id='calendar'></div>
  </body>
</html>

另一种简化写法(直接构造URL)

如果你的路由规则固定,也可以直接在JavaScript中构造完整URL:

dateClick: function(info) {
  const selectedDate = info.dateStr;
  window.location.href = `/day/${selectedDate}`;
}

验证

修改后点击日历日期,URL会正确带上日期参数(如localhost:5000/day/2023-03-09),页面可正常加载显示对应日期。

内容的提问来源于stack exchange,提问作者AprilMay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:17:40