在django blocktrans中使用'now'?

时间:2011-02-08 10:19:57

标签: django templates internationalization

我想将年份添加到Django blocktrans中 - 使用下面的语法。

{% blocktrans with now|date:"Y" as copydate %}
     © {{ copydate }} Company
{% endblocktrans %}

这与现有的Django票证(http://code.djangoproject.com/ticket/3088)相似,显然现在应该可以使用,但我也无法工作。

在这两种情况下,标签都不会展开,但其余的块转换效果很好。

3 个答案:

答案 0 :(得分:10)

唯一的方法是在python中获取日期并使用日期过滤器,因为Reiner建议或定义您自己的模板标签。 您可以创建一个小的上下文处理器来在您的上下文中设置日期。

def my_date(request):
  import datetime
  return {'my_date':datetime.datetime.now()}

并在settings.py

中添加
TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
      'the_package_of_my_tiny_function.my_date',
      )

在您的模板中使用它:

   {% blocktrans with my_date|date:"Y" as copydate %}
      © {{ copydate }} Company
   {% endblocktrans %}

不要忘记在视图中将RequestContext作为context_instance传递

Here就是一个例子。

答案 1 :(得分:5)

从Django 1.8开始,您现在可以使用{% now 'Y' as copydate %}语法,因此您应该可以这样做:

{% now 'Y' as copydate %}
{% blocktrans %}© {{ copydate }} Company{% endblocktrans %}

来源:https://docs.djangoproject.com/en/dev/ref/templates/builtins/#now

答案 2 :(得分:1)

now标记返回格式化日期,作为与传递的格式匹配的字符串。 date可能需要datetime/date个对象。因此将这些链接在一起是行不通的。

我甚至不确定你是否可以在with语句中使用now标记,但试试这个。

{% blocktrans with now "Y" as copydate %}

now接受与date相同的格式字符串。如果这也不起作用,我最好的办法是只传递datetime.datetime.now()结果模板,然后使用该模板而不是now

{% blocktrans with my_date|date:"Y" as copydate %}