在我的django设置.py文件,我有六种活动语言:
LANGUAGES = (
('de', gettext_noop('German')),
('en', gettext_noop('English')),
('es', gettext_noop('Spanish')),
('fr', gettext_noop('French')),
('nl', gettext_noop('Dutch')),
('pt', gettext_noop('Portuguese')),
)
使用i18n模式时,这些页面非常有用:
^{pr2}$但是,如果你在谷歌搜索我的网站,你会看到多个页面的语言前缀。有些是我不支持的语言。其中有些甚至不存在:
http://examble.com/ch/main
http://exmaple.com/zz/main
etc..
我不知道为什么这些页面被编入索引。他们不在我的网站地图上。然而,Django确实将它们作为页面使用。在
问题是,修改i18n_模式以使其只允许有效的、活动的语言的最佳方法是什么设置.py?我想所有其他2字符前缀404。在
这不是一个直接的解决办法,但可能会帮助你或指出一个好的解决办法。在
我们有两种选择:
一个中间件,您可以在其中检查用户的国家/地区并重定向到您允许的国家/地区(如果不允许用户国家/地区,则可以重定向到自定义url或显示404错误)
一个中间件,您可以在其中检查客户机的url路径,因此您将拥有
/country_code/url
并且可以执行上述操作,如果不允许路径,则可以重定向到自定义url或显示404错误小例子:
1。检查国家的中间件
pygeoIP在示例中使用,以按ip获取国家/地区
2。一个检查url的中间件
^{pr2}$如果您决定使用这些选项,您必须记住:
your_project/middleware/middlewarefile.py
中添加中间件文件你需要在你的设置.py公司名称:
中间件类=(
)
我在这里展示的代码还没有完成或测试,它只是帮助您找到一个好的解决方案的方向
最好的解决方案(我知道)是使用solid-i18n-urls。在
安装软件包:
稍微修改一下设置:
^{pr2}$使用实线模式代替i18n模式
现在,如果转到
example.com/en/main
,它工作得很好,因为en
是在语言linst中指定的,但是如果转到example.com/ch/main
,则会抛出404页未找到错误。在相关问题 更多 >
编程相关推荐