私は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' に設定しました。すべての迅速な対応に感謝しますが、これは私を殺しています...