django模板引擎中的印地语或波斯语数字

问题描述 投票:4回答:5

我想用波斯语或印地语编码方式打印{{forloop.counter}}以获得“1 2 3 4 ..”而不是“1 2 3 4 ...”。我搜索了很多,但我找不到任何相关的功能。你介意帮帮我吗?

问候

python django django-templates persian hindi
5个回答
7
投票

您可以创建自己的模板过滤器。

@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)

6
投票

你可以使用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表示)。


2
投票

您可以制作一个将数字转换为适当编码的templatefilter。然后你可以这样使用它:

{{ forloop.counter|convert_to_hindi }}

1
投票

您可以使用django国际化,在django中定义了一个库l10n


1
投票

您可以创建自己的自定义模板标记。

为此,您需要创建以下文件,假设您的应用程序名为“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这是一个持续时间。

© www.soinside.com 2019 - 2024. All rights reserved.