为什么Django不返回数据库中的日期时间字段?
我正在做我的第一个Django应用,想写一个简单的名言收集网站(想象一下bash.org),功能非常简单,主要是为了让我熟悉一下。因为sqlite最容易设置,所以我选择了它作为我的数据库。
这是我现在唯一的模型:
class Quote(models.Model):
text = models.TextField();
upvotes = models.IntegerField(default=0)
downvotes = models.IntegerField(default=0)
active = models.BooleanField(default=False)
date_published = models.DateTimeField(auto_now_add=True)
还有一个非常简单的详情模板,主要是用来显示信息的:
Quote: {{ quote.text }}<br>
Upvotes: {{ quote.upvotes }}<br>
Downvotes: {{ quote.downvotes }}<br>
Published: {{ qoute.date_published|date:"F j, Y, g:i a" }}
当我访问详情页面时,除了日期时间(显示为空)以外,其他信息都正常显示。不过,我检查了数据库,确认那个对象的列里确实存储了日期时间,并且在管理区域也能正常显示。此外,当我从manage.py运行shell时,得到的结果是:
>>> q = Quote.objects.all()[0]
>>> q.date_published
datetime.datetime(2009, 7, 24, 23, 1, 7, 858688)
我还在使用通用视图 django.views.generic.list_detail.object_detail
来处理请求,但我也尝试了下面的视图,结果是一样的。
def detail(Request, id):
q = get_object_or_404(Quote, pk=id)
return render_to_response('quotable/quote_detail.html', {'quote': q})
我在显示日期时是不是做错了什么,还是说这里发生了其他问题?
谢谢。
3 个回答
0
我认为 django.views.generic.list_detail.object_detail 使用的是一个叫做 object_id 的变量,而不是 id。
urlpatterns = patterns('',
(r'^$', 'django.views.generic.list_detail.object_list', info_dict),
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
url(r'^(?P<object_id>\d+)/results/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, template_name='polls/results.html'), 'poll_results'),
(r'^(?P<poll_id>\d+)/vote/$', 'mysite.polls.views.vote'),
)
当你切换到使用详细信息模板时,你的 URL 规则会出错。
0
我不太明白你在用那个 date:
过滤器做什么——如果你把它换成简单一点的,比如 date:"D d M Y"
,会发生什么呢?
2
正如亚当·伯尼尔提到的,你把 quote
拼错了。