2

私はDjangoを初めて使用し、 「Practical django Projects」という本からフレームワークを学んでいます(この本はcmsの書き方を教えてくれます)。私のコードは正常に実行されますが、get_absolute_url以下の関数に時間の問題があります。実際には、データベースに保存されている時間の 8 時間前にリンクを出力しています。Python シェルを使用して、データベースに保存された時間と管理インターフェイスに保存された時間を調べましたが、すべて正しいです。しかし、get_absolute_url func以下を使用してブラウザでリンクを生成すると、8時間先になり、休みになります。Django 設定ファイルに正しいゾーンを設定しました。何が悪いのかわかりません。

これを修正するにはどうすればよいですか (データベースに sqlite3、Django 1.4.1 を使用しています)。

Entry クラスのコードは次のとおりです。

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 に入力すると、2012 年 12 月 28 日午前 45 時 11 時 24 分という正確な時刻が返されます。日:28/時:19/分:24/秒:45

皆さんが提案したように、 () を pub_date = models.DateTimeField(default=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' に設定しました。すべての迅速な対応に感謝しますが、これは私を殺しています...

4

1 に答える 1

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)
于 2012-12-28T11:42:34.470 に答える