我想用波斯语或印地语编码打印 {{forloop.counter}} 意味着有“1 2 3 4 ..”而不是“1 2 3 4 ...”。我搜索了很多,但找不到任何相关功能。你介意帮助我吗?
问候
我想用波斯语或印地语编码打印 {{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)
def hindi_int(english_int):
devanagari_nums = ('०','१','२','३','४','५','६','७','८','९')
number = str(english_int)
return ''.join(devanagari_nums[int(digit)] for digit in number)
您可以使用自定义模板过滤器。我对 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 表示)。
您可以制作一个模板过滤器,将数字转换为适当的编码。然后你可以这样使用它:
{{ forloop.counter|convert_to_hindi }}
您可以使用 django 国际化有一个库 l10n 在 django 中定义
您可以创建自己的自定义模板标签。
为此,您需要创建以下文件,假设您的应用名为“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
,它是一个持续时间。
这对我来说可以将英文数字转换为波斯数字
from django import template
register = template.Library()
@register.filter(name='persian_int')
def persian_int(english_int):
persian_nums = {'0':'۰', '1':'۱', '2':'۲', '3':'۳', '4':'۴', '5':'۵', '6':'۶', '7':'۷', '8':'۸', '9':'۹'}
number = str(english_int)
persian_dict = number.maketrans(persian_nums)
result = number.translate(persian_dict)
return result
您可以尝试使用 unicode 版本的模板过滤器,如下所示:
register = template.Library()
to_arabic_number_trans = dict(
zip((ord(s) for s in u'0123456789'),
u'\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669')
)
to_english_number_trans = dict(
zip((ord(s) for s in u'٠١٢٣٤٥٦٧٨٩'),
u'\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089')
)
@register.filter
def format_number(value):
cur_lang = get_language()
if hasattr(value, 'translate'):
if cur_lang == 'ar':
return value.translate(to_arabic_number_trans)
return value.translate(to_english_number_trans)
return value
这适用于独立数字,但是关于日期数字的任何想法?就像在 2 يونيو، 2020 中一样,我怎样才能在不弄乱日期时间对象的情况下做到正确!