在Django的模板中使用参数的函数

时间:2017-03-30 12:23:43

标签: django templates

我已在models.py文件中正式构建了该函数:

from datetime import datetime
from django.template.defaultfilters import date as datefilter
from django.utils import translation

def date_customerprofile(language):
    now_ = datetime.today()
    if language == 'English':
        translation.activate('en')
        return datefilter(now_, 'l, F j, Y')
    else:
        translation.activate('fr')
        return datefilter(now_, 'l, j F Y')

我想在模板中使用此功能,但目前还不清楚它是否可以正常工作。我想使用{{ date_customerprofile('French') }},但它没有用。有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

  

我想使用{{date_customerprofile(' French')}},但它没有用

当然。 Django的模板语言不是Python。它对apply some lookup rules on objects足够聪明,但不允许函数或方法调用 - 是的,这是设计的:

  

如果您有编程背景,或者习惯于将编程代码直接混合到HTML中的语言,那么您需要记住,Django模板系统不仅仅是嵌入到HTML中的Python。这是设计的:模板系统用于表达表示,而不是程序逻辑。

https://docs.djangoproject.com/en/1.10/ref/templates/language/

这里的解决方案是create a custom templatetag。另请注意,translation.activate将更改剩余请求/响应周期的活动语言,这肯定不是您想要的 - 使用translation.override上下文管理器肯定是一个更好的主意。

最后看起来你正在重新发明方形轮 - 正确的语言应该已经为当前请求激活了,所以不应该手动强制它(使用非标准语言代码),你应该只使用当前的一个选择适当的日期格式。