Django多语言项目使用django-modeltranslation实现单视图多语言输入
解决方案
1. 普通自定义视图使用表单
直接使用django-modeltranslation自带的TranslationModelForm类即可自动生成所有语言版本的输入字段,无需手动逐个定义字段:
# forms.py from modeltranslation.forms import TranslationModelForm from .models import RentalType, Costs class RentalTypeForm(TranslationModelForm): class Meta: model = RentalType # 仅填写原始字段名,框架会自动生成所有语种的对应字段 fields = ['type', 'slug'] class CostsForm(TranslationModelForm): class Meta: model = Costs fields = ['name']
视图层使用方式和普通Django Form完全一致,模板渲染时直接输出表单:
<!-- 模板文件 --> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">保存</button> </form>
渲染后会自动生成name_en、name_fr、name_nl三个对应不同语言的输入框。如果需要自定义排版,也可以手动调用每个翻译字段:
<div class="form-item"> <label>费用名称(英文)</label> {{ form.name_en }} </div> <div class="form-item"> <label>费用名称(法语)</label> {{ form.name_fr }} </div> <div class="form-item"> <label>费用名称(荷兰语)</label> {{ form.name_nl }} </div>
2. Django Admin后台配置
如果需要在Django自带的Admin后台展示多语言输入框,使用自带的TranslationAdmin类即可:
# admin.py from modeltranslation.admin import TranslationAdmin from django.contrib import admin from .models import RentalType, Costs @admin.register(RentalType) class RentalTypeAdmin(TranslationAdmin): pass @admin.register(Costs) class CostsAdmin(TranslationAdmin): pass
效果验证
表单提交后所有语言版本的内容会自动保存到对应数据库字段,前端展示时无需额外处理,直接调用原始字段名即可,框架会自动根据当前访问客户端的语言设置返回对应语种的内容,完全匹配预期的实现效果。
内容的提问来源于stack exchange,提问作者Alexander Schillemans
相关产品推荐
相关产品推荐

