在Django中优雅地从URL生成datetime?

2 投票
4 回答
2552 浏览
提问于 2025-04-16 01:51

我正在开发一个网页应用,用户可以通过日期来查找信息,比如说:

results = Something.objects.filter(end = date)

我打算通过网址传递日期信息,像这样:

example.com/invoicer?2/9/1984

然后我会通过请求中的GET参数获取这个日期,先把前面的部分提取出来,存储为月份,去掉斜杠,再把后面的部分提取出来作为日期,等等等等。

我对错误检查和输入验证不是太担心,因为只有可信的管理员才能使用这个功能,不过我觉得这样生成日期时间的方式有点糟糕。

有没有更好的办法呢?

4 个回答

2

看起来很正常。我们还有一种方法,就是不使用查询字符串,而是直接用路径:

example.com/invoicer/end_date/1984-02-09
2

如果你用一个参数来表示这个值,会简单很多:

invoicer?date=2/9/1984

你可能还会更喜欢用ISO8601格式的日期:

invoicer?date=19840209

我不太清楚你这个界面是怎样的,或者你是希望大家手动输入这些网址吗?如果不是的话,使用ISO8601格式会更好。

6

[...] 把第一部分分开,存储为月份,删除斜杠,然后把第二部分分开作为日期,等等等等。

这样生成日期时间确实不是最好的方法。用字符串解析会更好:

>>> datetime.datetime.strptime('2/9/1984', '%m/%d/%Y')
datetime.datetime(1984, 2, 9, 0, 0)

撰写回答