Django1.4:在模板中设置语言链接以使用 i18n_patterns 的通用方法?

2024-01-12

我开始使用 Django 1.4 中的新 i18n_patterns。基本上,我希望在所有模板标题上都有我支持的每种语言的语言链接。我已将标头实现为包含在其他模板中的单独模板。

有没有办法让我的标头保持通用并解决此问题,而无需在模板上下文中传递当前视图名称或当前 url?我想这涉及到一个问题:如何以通用方式从模板内部检索当前视图或 url。

顺便说一句,我发现我之前使用 set_lang 视图使用引用者更改活动语言的方法将被 url_patterns 破坏,因为在更改语言后,当重定向到引用视图时,它会将其更改回来。

任何帮助弄清楚在模板中设置语言链接以通用方式与 url_patterns 一起使用的通用方法将不胜感激!


基本上,有两种不同的方法来设置语言。您可以使用i18n_patterns自动神奇地为您的网址添加语言代码前缀,或者您可以使用django.views.i18n.set_languageview 来更改用户会话中语言代码的值(或者 cookie,如果您的项目没有会话支持)。

值得注意的是算法LocaleMiddleware用于确定语言:

  • 首先,它在请求的 URL 中查找语言前缀。仅当您在根 URLconf 中使用 i18n_patterns 函数时才会执行此操作。有关语言前缀以及如何国际化 URL 模式的更多信息,请参阅 URL 模式中的国际化。

  • 如果失败,它会在当前用户会话中查找 django_language 键。

  • 如果失败,它会查找 cookie。所使用的 cookie 的名称由 LANGUAGE_COOKIE_NAME 设置设置。 (默认名称是 django_language。)

  • 如果失败,它会查看 Accept-Language HTTP 标头。该标头由您的浏览器发送,并按优先级顺序告诉服务器您喜欢哪种语言。 Django 会尝试标头中的每种语言,直到找到具有可用翻译的语言。

  • 如果失败,它将使用全局 LANGUAGE_CODE 设置。

您可能遇到的问题是您无法使用set_language从已经使用语言前缀提供服务的 url 进行重定向,除非您专门传递nextPOST 数据中的参数。这是因为set_language将默认重定向到引用者,其中将包含先前的语言前缀,其中LocaleMiddleware然后会看到并以旧语言提供内容(因为它会在检查 URL 之前查找语言前缀)django_language会话变量)。

为了清楚起见,举一个例子:

  1. 您的用户位于 /en/news/article/1000,并单击将发布“language=es”的链接到set_language.

  2. set_language看到 'language=es',检查 'es' 是否可用,然后将 'django_language' 会话变量(或 cookie)设置为 'es'

  3. 由于您尚未设置 'next',因此它会重定向到 request.META['HTTP_REFERER'] 的值,即 /a/news/article/1000

  4. LocaleMiddleware (source https://github.com/django/django/blob/master/django/middleware/locale.py#L11) 在 url 中看到“en”前缀,并激活“en”语言并设置request.LANGUAGE_CODE to 'en'

我看到两种可能的解决方案:

  1. 写你自己的set_language查看(查看原始来源here https://github.com/django/django/blob/master/django/views/i18n.py),它将检查引荐来源网址中的语言前缀(使用django.utils.translation.get_language_from_path),并将其更改为新选择的语言的前缀,然后再重定向回该语言。

  2. 使用javascript在客户端进行相同的操作,并设置nextPOST 参数。确实,这有点愚蠢;使用 javascript 动态地在所有 url 前面加上用户的首选语言代码可能会更简单,并且忘记set_language共。

看来这个新set_languageview 可能应该是 Django 的默认行为。有人提出了罚单 https://code.djangoproject.com/ticket/17569,其中包括建议的实现,但没有真正描述问题,随后被关闭。我建议开一张新票,更好地描述您的用例、现有问题引起的问题set_language实施以及您提出的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django1.4:在模板中设置语言链接以使用 i18n_patterns 的通用方法? 的相关文章

  • 在 django 查询集上使用 iterator()

    我最近遇到了一些奇怪的行为 需要检查我的理解 我在模型中使用一个简单的过滤器 然后迭代结果 e g allbooks Book objects filter author A A Milne for book in allbooks do
  • Django South - 将 null=True 字段转换为 null=False 字段

    我的问题是 转变的最佳做法是什么null True场变成null False使用 Django South 的字段 具体来说 我正在与ForeignKey 你应该先写一个数据迁移 http south aeracode org docs t
  • Django:无法为用于检索数据的模型实例化抽象模型

    我正在开发一个项目 该项目有一个 Djongo 抽象模型和一个主模型 当我尝试插入一个值时 它被插入而没有错误 但是当我尝试检索数据时 我得到 抽象模型无法实例化 这是我的模型 class Exam questions models Mod
  • TypeError at / 'str' 对象不是 django 模板中的映射

    我正在尝试在标签内设置链接 当我执行代码中所示的过程时 它给出了错误 str 对象的类型错误不是映射 它曾经工作正常 但后来决定不这样做 模板代码 a class item href 网址代码 urlpatterns path admin
  • 使用 python 制作本地服务器应用程序的最佳方法

    我想要简单轻松地集成 python 和 vba 人们 如果他们在阅读本文后亲自见到我 阅读本文可能会杀了我 但我正在使用 django 开发服务器来实现此目的 有没有什么简单又好的方法 仅举个例子 我想使用 python 模块 openpy
  • Django modelForm 中的文件上传

    我正在尝试在 appengine django 中上传文档 使用纯 django 代码成功上传文档 使用 python manage py runsever 但是当我尝试使用 appengine 项目运行 django 时 它给了我错误 E
  • 如何使用 Django (Python) 登录表单?

    我在 Django 中构建了一个登录表单 现在我遇到了路由问题 当我选择登录按钮时 表单不会发送正确的遮阳篷 我认为前端的表单无法从 查看 py 文件 所以它不会发送任何 awnser 并且登录过程无法工作 该表单是一个简单的静态 html
  • 过滤 django 中的组合日期和时间

    我有一个日期和时间分开的模型 我想过滤未来的事件并最终写了这个 这并不酷 有更好的方法吗 我可以以某种方式使用combine 和min 来实现这一点吗 正如您在查询中看到的 它必须包含 time gt now 的今天事件 future ev
  • Django - 在管理之外使用多对多水平界面

    我正在使用带有 m2m 字段的表单 我希望这个字段看起来像 django 管理站点的水平界面 我该怎么做 谢谢 您需要使用FilteredSelectMultiple widget from django contrib admin wid
  • 如何在 Django 中获取文件的扩展名?

    我正在 Django 中构建一个网络应用程序 我有一个将文件发送到views py 的表单 Views login required login url login url def addCancion request if request
  • 如何在 Django 中对搜索结果进行分页?

    下面的代码在字典中搜索单词 并将结果呈现在搜索 html 所以我需要对该页面上的结果进行分页 我该怎么做 我在这里读了这篇文章https docs djangoproject com en 1 9 topics pagination htt
  • Ajax 调用后使用 Django 模板呈现 JSON 对象

    我一直在尝试了解什么是最佳方法Ajax http en wikipedia org wiki Ajax 28programming 29 in Django http en wikipedia org wiki Django 28web f
  • 使用 Django 发出 HTTP 请求并反序列化输出

    因此 我对整个 Web 开发几乎完全陌生 但已经投入到一个使用 Django 从 Web 服务中提取和解析数据的副项目中 并且即使在查看 Django 时 我也很难准确地理解事情是如何工作的 文档 在 Django 中 我已经完成了所有设置
  • Postgres 和 Django - DataError:无法识别时区

    我们从一些用户那里收到以下错误 DataError time zone Asia Qostanay not recognized 我们发现问题出在以下 SQL 查询上 SELECT FROM app foobar WHERE EXTRACT
  • 电子邮件正则表达式将如何处理新的 unicode 域?

    Since 2009年10月 互联网 名称指定公司和 Numbers ICANN 批准了创建 国家 地区代码顶级域名 ccTLD 在互联网上使用 母语 IDNA 标准 脚本 我很确定大多数网站当前使用的标准正则表达式不会将它们标记为有效 还
  • 在 django-import-export 中导入 m2m 关系

    使用应用程序 django import export 以下是其中一个模型的配置示例 class ImportExportAdsTypeResource resources ModelResource class Meta model Ad
  • Django-allauth:社交帐户的自定义注册表单

    我发现在这个问题 https stackoverflow com questions 12303478 how to customize user profile when using django allauth 和文档 可以使用 ACC
  • docker、nginx、django 以及如何提供静态文件

    目标 用于生产 django 网站部署的 docker 容器集 我在这个过程中遇到的问题是 通常 nginx 直接提供静态文件 根据我对使用 docker 的良好架构的理解 您将拥有一个用于 wsgi 服务器的容器 可能是gunicorn
  • 如何在 django 表单中设置自定义 HTML 属性?

    我有一个 Django 表单 它是页面的一部分 假设我有一个字段 search input forms CharField u Search word required False 我只能通过模板访问它 form search input
  • Django 自定义查询集过滤器

    在 Django 中 是否有一种标准方法可以为查询集编写复杂的自定义过滤器 就像我能写的一样 MyClass objects all filter field val 我想做这样的事情 MyClass objects all filter

随机推荐

  • 有什么方法可以判断任意 .docx 文件是否采用 Strict Office Open XML 格式与过渡格式? (ECMA-376)

    我在网上搜索过 没有找到任何程序或工具可以区分那些编码为严格 ECMA 376 和非严格 ECMA 376 的 docx 文件 对于 xlsx 文件也是如此 大多数讨论都集中在给定应用程序支持哪些格式 例如LibreOffice 但不知道如
  • 一起录制视频和屏幕并用 Javascript 覆盖

    我想在网络摄像头旁边记录用户的屏幕并将结果显示为叠加层 如下所示 我假设在录制时我可以在两个单独的视频元素中显示多个流并用 CSS 覆盖它们 然而 我该如何save结果是两个视频的叠加 这可以在纯 JS 中实现 如下所示 通过 getUse
  • 为什么建议在 .NET 中使用反射?

    使用它绝对是一个好的做法吗 项目中有哪些可能的情况需要反思 反射的主要价值在于它可用于检查程序集 类型和成员 它是一个非常强大的工具 用于确定未知程序集或对象的内容 并且可用于多种情况 Reflection 的反对者会说它很慢 与静态代码执
  • 延迟函数不恢复

    所以 我一直在摆弄go 我发现下面的函数恢复成功 package main import fmt func a defer func if r recover r nil fmt Println Recovered r n int 5 7
  • 如何修复 Laravel 应用程序找不到 nginx 404?

    我所有的路线都得到了404未找到 如果我访问 我可以打开 Laravel 页面localhost mylaravel 但如果我访问localhost mylaravel login 我得到 404 未找到页面 如果我更改 home 上的回家
  • Login-AzureRmAccount 返回订阅,但 Get-AzureSubscription 返回空

    我能够成功登录Login AzureRmAccount 我还可以在 Login AzureRmAccount 的返回值中看到我的订阅 但登录后 如果我输入Get AzureSubscription它返回空 找到下面的截图 嗯 你需要使用Ge
  • 如何向android studio添加外部依赖(jar文件)?

    我正在尝试将外部库 httpmime 4 0 sources jar 添加到 android 项目中 因为 android studio 弹出如下错误 error 包 org apache http entity mime 不存在 erro
  • Microsoft UI 自动化的 Python 绑定? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人知道 Microsoft UI 自动化的 Python 绑定吗 http msdn microso
  • Flutter:如何避免在现有路由上推送相同的路由

    我有带有底部导航栏的视图 当您按下导航栏项目时 一条新路线将被推入视图中 final navigatorKey GlobalKey
  • Azure B2C:检查本地帐户创建期间是否存在另一个声明

    除了通常根据所使用的电子邮件当前是否存在创建帐户之外 我想知道如何检查 Azure Active Directory 中是否不存在另一个声明值 例如 对于我们的应用程序 创建帐户的任何人都必须提供组织名称 一旦他们注册 他们就是其组织群组的
  • 如何使用 Selenium 和 Python 更改用户代理

    我在使用 selenium 更改 Python 中的 Web 驱动程序用户代理时遇到错误 这是我的代码 import requests import json from selenium import webdriver from sele
  • Vector3 不可序列化 Unity3D

    好吧 我按照 Unity3D 数据持久化教程进行操作 一切都很顺利 直到我尝试保存 Vector3 类型的数据 本教程仅展示如何保存 int 和 string 当我使用函数 Save 时 控制台向我显示says SerializationE
  • 使用 REST API 的可编辑 jQuery 网格推荐

    首先 我已经读过这个问题 jQuery 网格建议 https stackoverflow com questions 159025 jquery grid recommendations 但这并不能回答我的问题 我有一个小带有 MongoD
  • 带指数的浮点文字的类型

    具有指数部分的浮点文字是什么类型 例如123456e 3在 C 99 中 是否属于类型float or double 当用作float初始化程序在float f 123456e 3 是否需要有一个f suffix 默认情况下 所有浮点文字
  • 节点Hmac认证

    我对认证过程的理解 主机创建一个secret and a public api key 客户端借助密钥对有效负载进行加密 这就是签名 然后将其公钥 有效负载 签名发送给主机 示例客户端 https github com bitfinexco
  • viewModelScope 未取消

    看完后Sean 对 Android 的解释 Google I O 19 https youtu be BOHK w09pVA t 1425我也尝试过同样的操作 init viewModelScope launch Timber i coro
  • 在替换迭代器中使用未初始化值 $ARGV[1]

    我正在尝试运行我编写的这个程序 但不断收到一条错误消息 其中指出以下内容 在替换迭代器中使用未初始化值 ARGV 1 replaceName pl 第 22 行 因为该值是从命令行传递的名称 并且是第二个参数 所以我不确定出了什么问题 us
  • android selectableItem背景选择

    我想在状态 激活 时更改视图的背景 并且我想保留以下效果 波纹 attr selectableItemBackground 是否可以扩展或组合选择器 attr selectableItemBackground 您可以使用LayerDrawa
  • 以编程方式更改应用程序 Dock 图标 javaFX

    我有一个只能从 JAR 加载的 javaFX 应用程序 但我想更改 mac 扩展坞中的图标 我已经成功地在 Windows 上解决了这个问题 我正在使用 Netbeans IDE 并且不想添加额外的 Apple JAR 扩展文件 正因为如此
  • Django1.4:在模板中设置语言链接以使用 i18n_patterns 的通用方法?

    我开始使用 Django 1 4 中的新 i18n patterns 基本上 我希望在所有模板标题上都有我支持的每种语言的语言链接 我已将标头实现为包含在其他模板中的单独模板 有没有办法让我的标头保持通用并解决此问题 而无需在模板上下文中传