django - 在 Django 中设置语言切换按钮
问题描述
我是 Django 的新手,想要一些关于如何设置单个语言切换按钮以在两种语言(在本例中为英语和日语)之间切换的建议,特别是如何在视图中设置此功能并从一个模板。
在模板中,我得到了以下内容,但它包含表单和按钮的重复代码,这显然不是很好。
{% get_current_language as LANGUAGE_CODE %}
{% ifequal LANGUAGE_CODE 'en' %}
<form action="{% url 'set_language' %}" method="post" id="form_{{ 'ja' }}" >
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<input name="language" type="hidden" value="{{ 'ja' }}" />
</form>
<button class="btn btn-sm btn-outline-primary" type="submit" form="form_{{ 'ja' }}" value="Submit">日本語</button>
{% else %}
<form action="{% url 'set_language' %}" method="post" id="form_{{ 'en' }}" >
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<input name="language" type="hidden" value="{{ 'en' }}" />
</form>
<button class="btn btn-sm btn-outline-primary" type="submit" form="form_{{ 'en' }}" value="Submit">English</button>
{% endifequal %}
对于初学者的问题,我深表歉意,但我非常感谢一些关于如何将上述逻辑放入视图并从模板访问它的建议。提前致谢。
解决方案
如果这对任何人都有用,我使用包含在我称为 language_selector.py 的文件中的自定义过滤器解决了这个问题,如下所示。
在 language_selector.py 中:
from django import template
register = template.Library()
@register.filter
def new_lang_code(current_lang_code):
if current_lang_code == ‘en’:
return ‘ja’
else:
return ‘en’
@register.filter
def new_lang_name(current_lang_code):
if current_lang_code == ‘en’:
return ‘日本語’
else:
return ‘English’
设置包含上述文件的模板标签目录。
app/
__init__.py
models.py
templatetags/
__init__.py
language_selector.py
views.py
在模板中:
{% load language_selector %}
⋮
<form action=“{% url ‘set_language’ %}” method=“post” id=“form_{{ LANGUAGE_CODE|new_lang_code }}” >
{% csrf_token %}
<input name=“next” type=“hidden” value=“{{ redirect_to }}” />
<input name=“language” type=“hidden” value=“{{ LANGUAGE_CODE|new_lang_code }}” />
</form>
<button class=“btn btn-sm btn-outline-primary” type=“submit” form=“form_{{ LANGUAGE_CODE|new_lang_code }}” value=“Submit”>{{ LANGUAGE_CODE|new_lang_name }}</button>
这很有效,并且似乎是实现语言切换按钮的一种简单而干净的方法,但是如果有更好的方法可以做到这一点,欢迎提出任何意见。
推荐阅读
- python - 我可以知道 recursive=true 是什么意思吗?
- angular - 如何更改密码连同用户的用户更改?
- asp.net - 如何通过上传 .exe 文件在 Azure 上托管控制台应用程序?
- javascript - 用 JavaScript 上传空的 excel 文件
- c# - 我需要帮助来显示我的折线图
- amazon-web-services - 无法将 AWS 主机注册到 Ambari 服务器
- rest - 通过 REST 在 Azure 容器注册表中处理图像
- c# - 如何制作类似触摸屏的主窗体 C#
- boolean-logic - 使用逻辑门设计超级解码器
- python - 为什么 nump.cov() 和 np.std() 计算的相关性与 np.corrcoef() 计算的结果不同