django 中的多语言形式

问题描述 投票:0回答:1

我英语不好。

我在 Django 中有一个使用 TranslatedFields 的项目。一切都很好,但在自定义管理面板中我遇到了一些问题。

目前我有 2 种语言,但将来可能会更多。

现在我在模板中编写此代码:

{{ form.short_description_fa|as_crispy_field }}
{{ form.short_description_en|as_crispy_field }}

我想以一种不需要用所有语言编写字段的方式来做到这一点。

我写了这个模板标签

def single_range(form, langs, index):
    c = len(langs)
    fields = []
    rng = range((index - 1) * c, (index - 1) * c + c)
    for f in rng:
        fields.append(list(form.fields.values())[f])
    return {
        'fields': fields
    }
{% for field in fields %}
    {{ field }}
    <br>
{% endfor %}

我从中得到了这个输出:

<django.forms.fields.CharField object at 0x7ff7fddcad50>
<django.forms.fields.CharField object at 0x7ff7fddc8b10>

有没有办法在不重复代码的情况下做到这一点?

python django internationalization
1个回答
0
投票

您可以通过将表单和语言传递到自定义模板标签,然后在标签内动态生成字段来实现此结果。

from django import template #import django template

register = template.Library()
@register.inclusion_tag('your_template.html')
def render_translated_fields(form, langs):

    num_langs = len(langs)
    fields = []
     for i, field in enumerate(form.fields.values()):
         if i % num_langs == 0:
             fields.append([form.fields[f"short_description_{lang}"] for lang in langs])

      return {
    'fields': fields
             }

然后,在您的模板 (your_template.html) 中,您可以像这样使用此自定义标签:

{% load your_custom_tags %}

{% render_translated_fields form ["fa", "en"] %}

更喜欢这个:Django 中的表单(如果问题仍然存在)

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