我正在尝试将模板呈现为特定语言的字符串,但每次都没有将请求或 RequestContext 传递给 render_to_string。我在用着
coffin.shortcuts.render_to_string
所以我想要么只在字典中包含一个变量,要么是一个假的上下文,除了语言之外,它会被忽略。
我可以通过发送请求使其工作,但这只是矫枉过正 - 这些是异步过程,所以有时我什至没有可用的请求。
我查看了 django 翻译、棺材和 jinja2 中的代码,它非常复杂。我也尝试将 LANGUAGE 或 LANGUAGE_CODE 作为字典的一部分发送,但没有结果。
如果我将 RequestContext 类的源代码修改为仅包含 csrf 和 i18n 模块,则棺材的 render_to_string 服从浏览器语言。
我创建了一个 FakeRequestContext 类:
class FakeRequestContext(Context):
def __init__(self, request, dict_=None, processors=None, current_app=None,
use_l10n=None, use_tz=None):
Context.__init__(self, dict_, current_app=current_app,
use_l10n=use_l10n, use_tz=use_tz)
from django.utils import translation
context_extras = {}
from django.conf import settings
context_extras['LANGUAGES'] = settings.LANGUAGES
context_extras['LANGUAGE_CODE'] = translation.get_language()
if 'LANGUAGE_CODE' in dict_:
context_extras['LANGUAGE_CODE'] = dict_['LANGUAGE_CODE']
context_extras['LANGUAGE_BIDI'] = translation.get_language_bidi()
self.update(context_extras)
这似乎完全重现了 RequestContext 正在做什么,但实际上并没有工作,即使 LANGUAGE_CODE 被设置为使用真实 RequestContext 时浏览器的内容。