python - 如何使用 django-modeltranslation 向模板添加翻译字段?
问题描述
我正在尝试使用 django-modeltranslation 翻译我的网页。我已经在提供的文档的帮助下完成了设置,但是在将模型翻译字段显示到模板时遇到了问题。你能帮我吗?
这是我所做的。
# settings.py
def gettext(s):
return s
LANGUAGES = (
('en', gettext('English')),
('de', gettext('German')),
)
MODELTRANSLATION_TRANSLATION_FILES = (
'main.translation',
)
在应用程序翻译.py 文件中
# project/app/translation.py
from modeltranslation.translator import translator, TranslationOptions
from .models import Post
class PostTranslationOptions(TranslationOptions):
fields = ('title', 'description')
translator.register(Post, PostTranslationOptions)
项目 urls.py 文件。
# urls.py
from django.contrib import admin
from django.urls import path, include
import debug_toolbar
from django.conf.urls.i18n import i18n_patterns
urlpatterns = [
path('admin/', admin.site.urls)
]
urlpatterns += [
path(r'^__debug__/', include(debug_toolbar.urls)),
]
urlpatterns += i18n_patterns(path('', include('main.urls')))
视图.py
# views.py
def ceo_dashboard(request):
post = Post.objects.all().select_related()
return render(request, 'main/dashboard_page.html', {'user': request.user, 'Posts': post})
模板文件
<h2 style="color:#0B2161;" >{{ post.title }}</h2>
<hr>
<p>{{ post.description }}</p>
<h5>Uploaded by : {{post.user}}</h5>
<hr>
现在我不知道如何将这些字段显示到模板中。
解决方案
您还需要添加一个名为 LocaleMiddleware 的中间件,它会为您的项目激活翻译:
MIDDLEWARE = [
# ....
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware', # THIS ONE
'django.middleware.common.CommonMiddleware',
]
在此处的 Django 文档中阅读有关它的更多信息:Django 如何发现语言偏好
之后,您还需要在主模板中添加语言重定向器:
{% load i18n %}
<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}">
<select name="language">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
<input type="submit" value="Go">
</form>
现在您可以转到您的管理员并添加帖子,其中 django 管理员要求在指定字段的适当表单中输入不同的翻译(在您的情况下,“标题”,“描述”)
希望这可以帮助您解决问题!
推荐阅读
- python - 用于 2 个数据集的 Sci-kit 学习机器学习脚本
- angular - ng-select 服务器端加载图标位置不正确
- python - WTF BooleanField 设置自定义值
- system-sounds - 更改电子设备的系统声音
- android - 从单独的前台服务访问位于应用程序缓存目录中的文件时权限被拒绝
- postgresql - Postgresql 更新 jsonb 数组列中的值
- google-bigquery - 基数 > 0 使用 BiqQuery
- excel - Excel 搜索索引和修剪匹配的行
- php - PHP - If 语句在假期显示特殊文本
- python - 列表中的函数 .assigned()