2017-04-12 14 views
0

我在Django模板上显示日期,并且我有一个python函数为我今天格式化日期并将它传递给我的模板。使用Django模板标签或传递来自python的变量更好吗

# function [format example: Wednesday 01 February 10:00:00] 
def today(): 
    date_now = datetime.now() 
    day_number = date_now.strftime("%d") 
    month_name = date_now.strftime("%B") 
    day_name = date_now.strftime("%A") 
    time = date_now.strftime("%X") 
    date = "{} {} {} {}".format(day_name, day_number, month_name, time) 
    return date 

# view 
def myview(request): 
    the_date_today = today() 
    context = { 
     "the_date_today": the_date_today, 
    } 
    return render(request, "template.html", context) 

# template 
<h1>{{ the_date_today }}</h1> 

我只是发现这样做只是Django的模板标签的方式。

# view 
def myview(request): 
    the_date_today = datetime.now() 
    context = { 
     "the_date_today": the_date_today, 
    } 
    return render(request, "template.html", context) 

# template 
<h1>{{ the_date_today|date:"l m F H:i" }}</h1> 

这有什么更好的方法?使用模板过滤器的代码少得多,但是这会让任何事情变得更慢吗?

+1

模板过滤器将不会让您的应用程序的任何慢。无论如何,这些场景都是python函数。最好在模板中保留演示文稿,所以我建议使用标准的Django模板过滤器。 – dentemm

回答

3

模板方法更好。这不会变慢。

如果稍后需要修改显示格式,只需修改模板而不是代码即可。

更重要的是,你甚至都不需要为the_date_today传递价值的模板,因为你可以在模板中调用now

<h1>{% now "l d F H:i" %}</h1> 
+0

非常感谢你,很多整齐:) –

+0

@RuthYoung:没问题。顺便说一句,我认为日期格式字符串应该是“l”,其中“m”(一年中的月份)被替换为“d”(该月中的某一天)。 – mhawke

相关问题