python - Django激活翻译项目范围而不是每个视图?
问题描述
我有一个 Django 项目,我根据Accept-Language
每个视图的标题激活翻译,如下所示,
from django.utils import translation
translation.activate(request.headers.get('Accept-Language', 'en'))
因此,如果我有一个使用 Django Rest Framework 的 ViewSet,我必须对每个方法执行上述操作,如下所示,
class MyViewSet(viewsets.ModelViewSet):
def list(self, request, *args, **kwargs):
translation.activate(request.headers.get('Accept-Language', 'en'))
# ....
def retrieve(self, request, *args, **kwargs):
translation.activate(request.headers.get('Accept-Language', 'en'))
# ....
def update(self, request, *args, **kwargs):
translation.activate(request.headers.get('Accept-Language', 'en'))
# ....
def destroy(self, request, *args, **kwargs):
translation.activate(request.headers.get('Accept-Language', 'en'))
# ....
这只是一个视图集,我目前有 10 多个视图集,每个视图集都需要翻译。这使得该过程更加难以维护,并导致大量代码重复。如何将此代码清理为像在整个项目范围内激活翻译之类的东西,有任何可用的选项吗?
感谢您的任何意见。
解决方案
我认为最干净的方法是为翻译编写一个 mixin。类似的东西:
class ActivateTranslationMixin:
def initialize_request(self, request, *args, **kwargs):
init_request = super().initialize_request(request, *args, **kwargs)
translation.activate(request.headers.get('Accept-Language', 'en'))
return init_request
然后你在你需要的所有视图中继承这个 mixin
class MyViewSet(ActivateTranslationMixin, viewsets.ModelViewSet):
...
以前从未尝试过这种方式,但它应该可以工作。
推荐阅读
- python - 相对均方根误差作为 keras 中的自定义损失函数的错误
- python - 如何将“For”循环导出到 csv 文件?
- php - 如何提取下一个可用的上一个日期?
- aws-lambda - 在 AWS 上导入 python-ldap 时缺少 libldap_r-2.4.so.2
- python - 使用模板从查询集中获取所有值
- php - 在本地主机上使用 xampp 发送电子邮件时出现问题
- github - 如何将 azure cli 命令的输出添加到 github 操作
- javascript - d3垂直堆叠条形图顶部的文本
- c++ - Qt-帮助创建 Qt Designer 自定义小部件插件,如 QTabWidget
- excel-formula - 如何通过从 A 列中选择多个不同的值来对 B 列的值求和?