如何根据用户 Select 的语言转换Django中urls.py文件中传递给**kwargs的值?模板中的翻译工作正常,语言由Nginx服务器设置的Accept-Language标头决定.但是,此语言 Select 在urls.py文件中没有任何影响,而是由settings.py文件中的LANGUAGE_CODE确定.

下面是一个urls.py的例子:

from django.urls import path
from main.views import SharedIndexView
from django.utils.translation import pgettext

app_name = 'some_site'

urlpatterns = [
    path('', SharedIndexView.as_view(), {'SITE_SEO_title':  pgettext('home', 'SITE_SEO_title')}
]

我的问题是,如何根据用户 Select 的语言而不是LANGUAGE_CODE来转换传递给path方法的**kwargs个值?有没有其他我可以用来实现这一点的方法?

推荐答案

主要的问题是,pgettext等于eagerly:当给定pgettext时,它会翻译文本.所以在这里,当它解释urls.py(第一次)时,before是服务器开始接受请求的那一刻.

我们需要postpone翻译过程,直到我们need字符串,因此,然后寻找语言上下文.这就是为什么使用pgettext_lazy:

from django.urls import path
from django.utils.translation import pgettext_lazy
from main.views import SharedIndexView

app_name = 'some_site'

urlpatterns = [
    path(
        '',
        SharedIndexView.as_view(),
        {'SITE_SEO_title': pgettext_lazy('home', 'SITE_SEO_title')},
    )
]

因此,这将返回一个对象,该对象在需要时转换字符串.

Django相关问答推荐

Django-HTMX:呈现到不同目标的表单验证错误

覆盖保存以创建范围的多个对象()

如何在Django模板中为无效词典查找打开异常?

如何使更新记录在 Django 模型中传递信号?

使用OuterRef过滤器获取Django记录的最大值

为什么 timezone.now 在作为默认值应用于 Django 中的 DateField 时显示future 日期

如何在 Django 中将下一个 8 月 1 日添加为 DateTimeField 默认值

Django中基于令牌的身份验证

Django ORM,按天分组

Django 从 url 保存图像并与 ImageField 连接

Django:将原始html(来自数据库)显示为html,而不是呈现

Django: Admin:在管理员中更改字段的小部件

使用 scrapy 访问 Django 模型:定义 Django 元素的路径

在 django 中是否有生成 settings.SECRET_KEY 的功能?

如何在 Django 中触发 500 错误?

Django 什么是反向关系?

Django将HttpResponseRedirect返回到带有参数的url

javascript 文件中的 Django {% static 'path' %}

Django模板转换为字符串

Python/Django - 避免在源代码中保存密码