【问题标题】:translated enum fields in template tags模板标签中翻译的枚举字段
【发布时间】:2011-09-01 17:24:34
【问题描述】:

我尝试在模板中显示枚举的名称。要清楚, 我在model.py 中有类似枚举的类

class EmployerWorkerNumberRange():
R_0 = 0
R_1_5 = 1
R_6_15 = 2
UNKNOWN = 3

EMPLOYER_WORKER_NUMBER_RANGE =(
    (R_0,_("wnr_0")),
    (R_1_5 ,_("wnr_1_5")),
    (R_6_15,_("wnr_6_15")),
    (UNKNOWN,_("UnknownWorkerNumberRange")),
)

当我以像

这样的形式使用它时

wnr = forms.ChoiceField(label=_("emp_full_reg_wnr"), required=True, choices=EmployerWorkerNumberRange.EMPLOYER_WORKER_NUMBER_RANGE)

效果很好。(用翻译后的值填充下拉列表,当我得到选定的项目时,它只变成 id)

我的问题是如何通过提供模板的 id 在模板中显示任何已翻译的值。 比如我想用EmployerWorkerNumberRange.EMPLOYER_WORKER_NUMBER_RANGE[0]

你能给我建议吗?

谢谢

【问题讨论】:

    标签: django enums django-templates templatetags


    【解决方案1】:

    要显示人类可读的字段值,请在模型实例上使用get_$var_display() 方法(为所有带有choices 的字段自动创建)。对于您的示例,它是这样的:

    {{ company.get_wnr_display }}
    

    要在没有模型实例的情况下通过索引获取值,最简单的方法是编写自定义过滤器,它将存储在变量中的索引转换为所需的值:

    {{ some_value|as_wnr_title }}
    

    【讨论】:

    • 完美运行,谢谢!有没有我能读到的关于这些事情的文件?我已经阅读了 django 文档,但我没有注意到这种用法..
    • 这一切都在 django 文档中,您可能一直在查看错误的部分。这个特殊的方法在这里:docs.djangoproject.com/en/1.3/ref/models/instances
    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2011-11-27
    • 2012-03-20
    • 1970-01-01
    相关资源
    最近更新 更多