django - Django:模型数据未在本地时区显示
问题描述
我正在使用 Django 1.11 和 pytz==2018.3。
我有一个聊天模型,其时区字段不会在当地时间显示。
class Message(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sender')
receiver = models.ForeignKey(User, on_delete=models.CASCADE, related_name='receiver')
message = models.CharField(max_length=1200)
timestamp = models.DateTimeField(auto_now_add=True)
is_read = models.BooleanField(default=False)
当我像这样正常打印时,我得到:
<div class="textcontainer lighter">
{{ message }}
<span class="time-right">{{ message.timestamp|date:"SHORT_DATETIME_FORMAT" }}</span>
</div>
输出:
July 8, 2018, 2:55 a.m
但是,这是 UTC 时间(提前 6 小时。我希望它说一个不同的时间)。
我尝试了以下方法:
{{ message.timestamp|localtime }}
但这无济于事。
我也尝试过包括这两个:
{% load tz %}
{% get_current_timezone as TIME_ZONE %}
在我的 settings.py 文件中,我有:
USE_L10N = True
USE_TZ = True
想法?提前致谢!
解决方案
这里的本地时间是指您在settings.py
文件中设置的时区时间,默认为 UTC。像这样的东西在你的定义settings.py
:
TIME_ZONE = 'America/Chicago' # or
TIME_ZONE = 'Asia/Kolkata'
并且以当地时间显示的所有时间现在将仅在该时区中。
我相信您正在寻找的是用户机器的时间,因此 Django 中没有内置任何内容(据我所知)。您需要编写自己的逻辑来获取用户的时区,这可能是基于他们的 IP 地址或在 Javascript 中的客户端处理,这可以让您获得用户机器上的时间。另一种选择是在注册时询问用户的时区并将其保存在数据库中以供以后用于时区转换。
这是一个 django 插件django-easy-timezones可以帮助你。它基本上使用中间件来获取连接用户的 IP 地址信息,然后使用ip 地理定位数据库将其映射到一个国家/地区以获取最终用户的时区。
推荐阅读
- excel - 跨多个工作表共享宏
- php - 用 eval() 创建一个 for 循环?
- html - 使用 VBA 从 HTML 中的下拉菜单中进行选择
- matlab - 如何在 MATLAB 上构建具有共享层的 Actor-Critic 模型?
- java - Firebase - 在 Android 应用程序中分组的值
- c# - DocuSign:是否有使用权限来避免 USER_NOT_ENVELOPE_SENDER_OR_RECIPIENT 错误?
- swift - (iOS) Spotify 重定向 URI 错误:SpotifyLogin.LoginError.invalidUrl
- flutter - 使用flutter_bluetooth_serial包通过蓝牙读取数据
- c - C 编程 - 使用文件处理函数移动到文本文件中的下一行
- node.js - 如何使用nodejs更改IP