Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django时区不知道日期时间字段错误_Python_Django - Fatal编程技术网

Python Django时区不知道日期时间字段错误

Python Django时区不知道日期时间字段错误,python,django,Python,Django,我的博客应用程序中有一个简单的帖子模型,如下所示: class Post(CreateUpdateDateModel): # ... body = models.TextField() publish = models.DateTimeField() # ... def get_absolute_url(self): print(self.publish) # printing publish date return re

我的博客应用程序中有一个简单的帖子模型,如下所示:

class Post(CreateUpdateDateModel):
    # ...
    body = models.TextField()
    publish = models.DateTimeField()
    # ...

    def get_absolute_url(self):
        print(self.publish) # printing publish date
        return reverse(
            'blog:post_detail',
            args=(
                self.publish.year,
                self.publish.month,
                self.publish.day,
                self.slug
            )
        )
在my settings.py中,我有:

TIME_ZONE = 'Asia/Kolkata'

USE_TZ = True
我正在使用Django Admin创建Post实例。Django管理员显示/显示正确的时间(当地时间,3月10日)。在
get_absolute\u url
方法中打印发布日期显示
2018-03-09 19:54:29+00:00
(3月9日)。这会导致在访问帖子时生成错误的url,从而导致错误:
DoesNotExist at/blog/2018/3/9/third blog normal/


请提供帮助或提示以解决此问题。

要根据服务器的本地时间生成绝对url,输入到
get\u absolute\u url()
的时间必须在其本地时区内:

from django.utils.timezone import localtime

class Post(CreateUpdateDateModel):
    # ...
    body = models.TextField()
    publish = models.DateTimeField()
    # ...

    def get_absolute_url(self):
        local_publish = localtime(self.publish)
        return reverse(
            'blog:post_detail',
            args=(
                local_publish.year,
                local_publish.month,
                local_publish.day,
                self.slug
            )
        )

这里真正的教训是,不管他们的名字如何,仍然要设置
USE_TZ
时区。每当Django从数据库检索datetime时,它都会丢失其时区。

url中与
/blog/2018/3/9/third blog normal/
相对应的条目是什么?在将错误的日期转换为url之前,您是否考虑过将
self.publish
转换为?它指的是2018/3/10创建的
Post
实例。@Brian,这样做很有效。使用
local\u publish\u date=localtime(self.publish)
将self.publish转换为本地时间,然后通过年、月、日发布详细的url。非常感谢,我想我会写一个正确的答案:)