2013-05-04 65 views
0

views.pyQuering日期和时间字段并呈现模板

def new_report(request): 
    user = request.user 
    reports = Report.objects.filter(user=user) 
    today = datetime.datetime.today() 

    reports_today = reports.filter(created_date_time__year=today.year, created_date_time__month=today.month, created_date_time__day=today.day) 
    num_today = len(reports_today) + 1 
    num_today = str(num_today).zfill(3) 
    reportform = ReportForm() 
    if request.method == 'POST': 
     reportform = ReportForm(request.POST) 
     if reportform.is_valid(): 
      report = reportform.save(commit=False) 
      report.user = user 
      report.created_date_time = today 
    return render(request, 'incident/new_report.html', 
        { 
        'newreport_menu': True, 
        'reports': reports, 
        'reportform':ReportForm, 
       }) 

models.py

class Report(models.Model): 
    user = models.ForeignKey(User, null=False) 
    incident_number = models.CharField('Incident Number', max_length=100) 
    device_id = models.CharField('Device Id', max_length=100) 
    app_uuid = models.CharField('Unique App Id', max_length=100) 
    created_date_time = models.DateTimeField('Created',auto_now=True) 

模板

{{ reports.created_date_time|date:"j M Y g:i A" }} 

撷取来自数​​据库created_date_time并转换为这格式20 Jan2011 at 2:26PM在模板中显示。

查询从数据库created_date_time并显示到template.I没有得到任何错误的代码,我认为一些逻辑有问题,所以它不会发生。

+1

看起来像'reports'变量是报告对象的列表,但你访问它的模板它是一个单独的Report对象。试试这个:'{{reports.0.created_date_time | date:“j MY g:i A”}}' – stalk 2013-05-04 13:36:45

+0

ya,它显示日期和时间,但是以这种格式2013年5月4日10:00 PM,所以我需要在2013年5月4日的晚上10点格式,即在日期和时间之间的字符串“at”应该包括,如何做到这一点。 – user2086641 2013-05-04 13:45:35

+0

对此有何更新? – user2086641 2013-05-04 14:14:14

回答

0

reports变量在模板中被访问,因为它是一个Report对象,但它是Report对象的列表。

要访问的第一个项目在列表中的模板,语法如下用途:

{{ reports.0.created_date_time|date:"j M Y g:i A" }} 

现在,格式打印日期你所提到的最简单的方法是:

{{ reports.0.created_date_time|date:"j M Y" }} at {{ reports.0.created_date_time|date:"g:i A" }} 

但,在我看来,更好的方法是创建custom template filter,这将打印所需的格式。

your_app/templatetags/format_dates.py

from django.utils.dateformat import format 
from django.template.base import Library 

register = Library() 

@register.filter(expects_localtime=True, is_safe=False) 
def format_date(value): 
    if not value: 
     return u'' 
    try: 
     return u"%s at %s" % (format(value, 'j M Y'), format(value, 'g:i A')) 
    except AttributeError: 
     return u'' 

,然后在模板:

{% load format_dates %} 

... 

{{ reports.0.created_date_time|format_date }} 
相关问题