2012-12-28 21 views
1

我很新的的Django,我一直從書「實用Django的項目」學習框架(這本書教我們寫一個CMS )。我的代碼運行良好,但我有以下get_absolute_url函數的時間問題。它實際上比我的數據庫中保存的時間提前8小時輸出鏈接。我使用python shell查看數據庫中保存的時間以及保存在管理界面中的時間,它們都是正確的。但是,當我使用下面的get_absolute_url func在瀏覽器中生成鏈接時,它會提前8小時並拋出一天。我在我的Django設置文件中設置了正確的區域。我無法弄清楚什麼是錯的。Django的HTML輸出時間是超前的數據庫?? 8小

我該如何解決這個問題(我正在爲我的數據庫使用sqlite3,Django 1.4.1)?

這裏是我的入門級代碼:

import datetime 

from django.db import models 
from django.contrib.auth.models import User 

from tagging.fields import TagField 
from markdown import markdown 
from django.conf import settings 
from django.utils.encoding import smart_str 

class Entry(models.Model): 

live = LiveEntryManager() 
objects = models.Manager() 
#define constant options 
LIVE_STATUS = 1 
DRAFT_STATUS = 2 
HIDDEN_STATUS = 3 
STATUS_CHOICES = (
    (LIVE_STATUS, 'Live'), 
    (DRAFT_STATUS,'Draft'), 
    (HIDDEN_STATUS, 'Hidden'), 
    ) 
#adding features to admin interface 
class Meta: 
    ordering = ['-pub_date'] 
    verbose_name_plural = "Entries"  
#define model fields: 
title = models.CharField(max_length=250) 
excerpt = models.TextField(blank=True) #It's ok to not add anything for this field 
body = models.TextField() 
pub_date = models.DateTimeField(default=datetime.datetime.now()) 
slug = models.SlugField(unique_for_date='pub_date') 

enable_comments = models.BooleanField(default=True) 
featured = models.BooleanField(default=False) 
status = models.IntegerField(choices=STATUS_CHOICES, default=LIVE_STATUS) 
#HTML 
excerpt_html = models.TextField(editable=False, blank=True) 
body_html = models.TextField(editable=False, blank=True) 
#third party: 
tag = TagField() 
#relationship fields: 
categories = models.ManyToManyField(Category) 
author = models.ForeignKey(User) 
#define methods: 
def save(self, force_insert=False, force_update=False):#modify the model.save() method 
    self.body_html = markdown(self.body) 
    if self.excerpt: 
     self.excerpt_html = markdown(self.excerpt)#from excerpt field to excerpt_html 
    super(Entry, self).save(force_insert, force_update) 
def get_absolute_url(self): 
    return "%s" % self.pub_date.strftime("year:%Y/day:%d/hour:%H/minute:%M/second:%S") 
#@models.permalink 
#def get_absolute_url(self): 
    #return ('coltrane_entry_detail',(), {'year': self.pub_date.strftime("%Y"), 
              'month': self.pub_date.strftime("%b").lower(), 
              'day': self.pub_date.strftime("%d"), 
              'slug': self.slug}) 
def __unicode__(self): 
    return self.title 

這是我entry_archive.html:

{% extends "base_entries.html"%} 

{%block title%}{{block.super}} | Latest entries{% endblock %} 


{% block content %} 
{% for entry in latest %} 

<h2>{{entry.title}}</h2> 
<p>Published on {{ entry.pub_date|date:"F j P s, Y" }}</p> 
{% if entry.excerpt_html%} 
    {{entry.excerpt_html|safe}} 
{% else %} 
    {{entry.body_html|truncatewords_html:"50"|safe}} 
{% endif%} 
<p><a href="{{entry.get_absolute_url}}">Read full entry ...</a></p> 

{% endfor %} 
{%endblock%} 

{%block whatis%} 
<p>This is a list of the latest {{latest.count}} entries published in my blog.</p> 

{% endblock %} 

,因爲我是一個新的用戶我無法發佈截圖。 {{entry.pub_date | date:「F j P s,Y」}}在我的html中給我正確的時間:12月28日上午11:24上午45,2012年。但{{entry.get_absolute_url}}給了我一年:2012 /日期:28 /小時:19 /分鐘:24 /秒:45

您添加()到pub_date = models.DateTimeField(默認= datetime.datetime.now()),你們建議,但結果是還是一樣的(書中實際上建議不要添加())。麻煩的是{{entry.pub_date | date:「F j P s,Y」}}給我正確的時間在我的html上,但{{entry.get_absolute_url}}提前8小時。我將我的setting.py時區設置爲TIME_ZONE ='America/Los_Angeles'。感謝所有的快速反應,但是這是我的命......

+0

看起來像一個時區問題。您和您的服務器位於哪個時區? – Thilo

+0

查詢settings.py中的TIME_ZONE值 – sneawo

+0

'pub_date = models.DateTimeField(default = datetime.datetime.now)'應該是'pub_date = models.DateTimeField(default = datetime.datetime.now())'查看缺少的'( )''之後'.' –

回答

0

變化如下:

pub_date = models.DateTimeField(default=datetime.datetime.now) 

要麼

pub_date = models.DateTimeField(default=datetime.datetime.now()) 

pub_date = models.DateTimeField(auto_now_add=True) 
相關問題