我想用波斯语或印地语编码方式打印{{forloop.counter}}以获得“1 2 3 4 ..”而不是“1 2 3 4 ...”。我搜索了很多,但我找不到任何相关的功能。你介意帮帮我吗?
问候
您可以创建自己的模板过滤器。
@register.filter(name='persian_int')
def persian_int(english_int):
devanagari_nums = ('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹')
number = str(english_int)
return ''.join(devanagari_nums[int(digit)] for digit in number)
你可以使用custom template filter。我对Django的l10n库不太熟悉,知道他们是否为你做了这件事。
def devanagari_int(arabic_int):
""" Converts an arabic numeral (ex. 5817) to Devanagari (ex. ५८१७) """
devanagari_nums = ('०','१','२','३','४','५','६','७','८','९')
# arabic_nums = ('۰','١','۲'....)
# farsi_nums = (...)
number = str(arabic_int)
return ''.join(devanagari_nums[int(digit)] for digit in number)
# register your filter, and then:
{{forloop.counter|devanagari_int}}
确保将过滤器文件保存为UTF-8(或者使用相应的unicode表示)。
您可以制作一个将数字转换为适当编码的templatefilter。然后你可以这样使用它:
{{ forloop.counter|convert_to_hindi }}
您可以使用django国际化,在django中定义了一个库l10n
您可以创建自己的自定义模板标记。
为此,您需要创建以下文件,假设您的应用程序名为“myapp”
myapp/
__init__.py
models.py
templatetags/
__init__.py
extra_tags.py
views.py
然后在文件extra_tags.py
中添加以下代码
from django import template
register = template.Library()
@register.filter(name='persianize_digits')
def persian_int(string):
persianize = dict(zip("0123456789",'۰۱۲۳۴۵۶۷۸۹'))
return ''.join(persianize[digit] if digit in persianize else digit for digit in str(string))
现在你只需在你的模板中做{{ value|persianize_digits }}
,数字就会变成波斯语。此方法也适用于整数不是数字但包含一些数字的字符串,例如10:27:33
这是一个持续时间。