我英语不好。
我在 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>
有没有办法在不重复代码的情况下做到这一点?
您可以通过将表单和语言传递到自定义模板标签,然后在标签内动态生成字段来实现此结果。
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 中的表单(如果问题仍然存在)