Джанго: комбинируйте ленивый перевод с пометкой «безопасно» при выборе модели

Да, я хочу сохранить переведенные варианты для своей модели, но Джанго не согласен со мной по этому поводу. Версия 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 и перевода, не используя ленивый перевод и т. д. и т. д., это всегда сводится либо к работе mark_safe, либо к работе перевода. Но никогда оба...

Как правильно совместить две функции?


person Allard Stijnman    schedule 22.02.2013    source источник


Ответы (1)


Добавлять:

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 документы.

person DhhJmm    schedule 22.02.2013
comment
работает django 1.3, и хотя я пробовал, я не смог заставить это работать. - person Allard Stijnman; 26.02.2013