2

我正在尝试将模板呈现为特定语言的字符串,但每次都没有将请求或 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 时浏览器的内容。

4

0 回答 0