使用Django模板标签或从python传递变量更好吗

Posted

技术标签:

【中文标题】使用Django模板标签或从python传递变量更好吗【英文标题】:Is it better to use Django template tags or pass variables from python 【发布时间】:2017-09-08 03:18:38 【问题描述】:

我在 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>

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

【问题讨论】:

模板过滤器不会让你的应用变慢。无论如何,在幕后这些都是python函数。最好将演示文稿保留在模板中,因此我建议为此使用标准的 Django 模板过滤器。 【参考方案1】:

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

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

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

<h1>% now "l d F H:i" %</h1>

【讨论】:

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

以上是关于使用Django模板标签或从python传递变量更好吗的主要内容,如果未能解决你的问题,请参考以下文章

如何将javascript变量传递给django模板标签

如何在 django 模板标签中传递 Javascript 变量

Django 将变量传递给 URL 标签

Django:如何使用模板变量和 url 标签

04_Django-模板变量/标签/过滤器/继承-url反向解析

04_Django-模板变量/标签/过滤器/继承-url反向解析