Django:在模型选择中合并惰性翻译和标记安全

ctrmrzij  于 2023-02-05  发布在  Go
关注(0)|答案(2)|浏览(142)

是的,我想为我的模型存储翻译后的选项,但是Django不同意我的观点。Django的版本是1.3,模型和选项看起来像这样:

from django.db import models
from django.utils.safestring import mark_safe          
from django.utils.translation import ugettext_lazy as _

RATE_CHOICES = (
    ('', _('Choose service rate')),
    ('5cpm_EUR', mark_safe(string_concat('€ 0,05 ', _('per minute')))),
    ('1cpm_EUR', mark_safe(string_concat('€ 0,01 ', _('per minute')))),
)

class Product(models.Model):
    service_rate = models.CharField(_('service rate'), max_length=10, blank=True, choices=RATE_CHOICES)

此外,选项也用于模型表单(对于另一个模型,因此我不得不重新声明字段),如下所示:

service_rate = forms.ChoiceField(choices=RATE_CHOICES, widget=forms.Select(attrs={'class': 'chzn-select rate-select'}), required=False)

问题是无论我怎么努力遵循django文档中的内容,颠倒mark_safe和translation的顺序,不使用懒惰的翻译等等。它总是归结为mark_safe工作或翻译工作。但从来没有两者兼而有之...
如何将这两个功能正确地结合起来?

4nkexdtk

4nkexdtk1#

增加:

from django.utils import six  # Python 3 compatibility
from django.utils.functional import lazy
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _

mark_safe_lazy = lazy(mark_safe, six.text_type)

然后:

mark_safe_lazy(string_concat('€ 0,05 ', _('per minute')))

这被添加到Django 1.4文档中。

yqkkidmi

yqkkidmi2#

2023年怎么干?

format_html_lazy = lazy(format_html, str)

工作原理与format_html相同,但保持懒惰的翻译懒惰!:)

相关问题