gpt4 book ai didi

Django 的 get_current_language 总是返回 "en"

转载 作者:行者123 更新时间:2023-12-03 22:42:37 26 4
gpt4 key购买 nike

在我的 Django 2.0 站点中,我想设置 lang html 标记的属性到当前语言环境的语言。在我的 base.html其他模板扩展,我使用 get_current_language 通过以下方式

{% load i18n %}

{% get_current_language as LANGUAGE_CODE %}
<!DOCTYPE html>
<html lang="{{ LANGUAGE_CODE }}">
...
</html>

该网站有多种语言的翻译。如果我在浏览器中切换语言,我会看到正确的翻译,但 lang属性将始终包含 en .

在我的 settings.py我有
USE_I18N = True
LANGUAGE_CODE = 'en-us'

并基于 Goran 的建议以下中间件顺序
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
]
LANGUAGES设置未设置。

正如 Kostadin Slavov 所建议的那样我尝试从 View 中打印语言。似乎get_current_language调用django.utils.translation.get_language,所以我在 View 中插入了以下内容
from django.utils import translation                                        
print(translation.get_language())

它打印正确的值(例如 de 当浏览器设置为德语时访问 View )。

我还缺少什么?

最佳答案

我尝试通过以下步骤模拟您的环境:

$ cd ~
$ python3 -m venv ~/venvs/mysite
$ source ~/venvs/mysite/bin/activate
$ pip install django==2.0.8
$ django-admin startproject mysite

然后我更新了生成代码,如您的示例所示:
  • 我的网站/settings.py
    ...
    MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    ...
    TEMPLATES = [
    {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': ['templates'],
    'APP_DIRS': True,
    'OPTIONS': {
    'context_processors': [
    'django.template.context_processors.debug',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
    ],
    },
    },
    ]
    ...
  • 我的网站/urls.py
    from django.contrib import admin
    from django.urls import path
    from django.views.generic.base import TemplateView

    urlpatterns = [
    path('', TemplateView.as_view(template_name='base.html'), name='home'),
    path('admin/', admin.site.urls),
    ]
  • 模板/base.html
    {% load i18n %}
    {% get_current_language as LANGUAGE_CODE %}
    <!DOCTYPE html>
    <html lang="{{ LANGUAGE_CODE }}">
    <body>
    <pre>LANGUAGE_CODE = {{ LANGUAGE_CODE }}</pre>
    <body>
    </html>

  • 使用 Django 生成的代码和我上面的一些更新,如果我切换浏览器访问 http://localhost:8000/ 的语言,我可以看到不同的语言代码。在开始之后:
    $ python manage.py runserver

    在您的本地环境中尝试我的步骤并检查它是否有效,然后将您的项目与上面的代码进行比较。

    更新

    尝试使用 diffsettings查看“当前设置文件和 Django 的默认设置之间的差异”。

    关于Django 的 get_current_language 总是返回 "en",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51641412/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com