如何使用fullcalendar和flask重定向到新页面

问题描述 投票:0回答:1

我正在尝试将 FullCalendar 与 Flask 一起使用。我希望当在日历页面上单击某个日期时,它可以根据该日期重定向到“日”页面。现在我只是希望它重定向到一个日期页面,在顶部显示该日期,一旦我开始工作,我将添加更多格式。

我正在使用 url_for 重定向到日期页面,但它似乎没有将日期传递给网址。它只是转到“404 url not found”页面,并且该 url 不包含日期,它只是“localhost:5000/day/”,而我期望它是“localhost:5000/day/2023-03” -09' 或选择的任何日期。

我尝试在单击日期时将日期记录到控制台并且有效。我还尝试手动访问 localhost:5000/day/2023-03-09 ,这也将我带到我期望的页面。我可以看到问题是日期没有过去,但我不确定为什么会这样。非常感谢任何帮助!

这是 cal.html 页面:

<!DOCTYPE html>
<html lang='en'>
  <head>
    <meta charset='utf-8' />
    <script src='https://cdn.jsdelivr.net/npm/[email protected]/index.global.js'></script>
    <script>

      document.addEventListener('DOMContentLoaded', function() {
        var calendarEl = document.getElementById('calendar');
        var calendar = new FullCalendar.Calendar(calendarEl, {
          initialView: 'dayGridMonth',
          dateClick: function(info) {
            date = info.dateStr
            window.location.href = {{ url_for('cal.day', date=date) }}
            },

        });
        calendar.render();
      });

    </script>
  </head>
  <body>
    <div id='calendar'></div>
  </body>
</html>

这是我的routes.py:

from flask import render_template, Blueprint


cal = Blueprint('cal', __name__, template_folder='templates', static_folder='static',
                 static_url_path='/cal/static')


@cal.route('/', methods=['GET'])
def calendar():
    return render_template('cal.html')


@cal.route('/day/<date>', methods=['GET', 'POST'])
def day(date):
    date=date
    return render_template('day.html', date=date)

day.html 是:

<!DOCTYPE html>
<html lang='en'>
  <head>
    <meta charset='utf-8' />
  </head>
  <body>
    <h1>{{date}}</h1>
  </body>
</html>
javascript python flask fullcalendar
1个回答
0
投票

你不能指望 Flask/python 块能够读取 JS 变量(在本例中为

date
),其中 a) 来自不同的语言和运行时环境,b) 直到 python 之后才设置代码已经执行了。

显然,让 Flask 正确生成 URL 路由(而不是将其硬编码到 JS 中)很有用,但是直到 Python 代码运行之后你才能知道要使用的最终日期字符串。

解决此问题的方法是将占位符值放入 python 生成的 URL 字符串中,然后在 dateClick 回调运行时使用 JavaScript 将占位符文本替换为真实的日期字符串。

我不是一个普通的Python或Flask用户,所以我希望我的语法是正确的,但即使没有,希望你能看到基本的想法:

dateClick: function(info) {
  date = info.dateStr;
  url = '{{ url_for('cal.day', date='###') }}';
  url = url.replace("###", date);
  window.location.href = url;
},
© www.soinside.com 2019 - 2024. All rights reserved.