2

我正在尝试使用 Django 和 Python 创建一个双语言(意大利语和英语)网站。我已经按照这个小教程进行了操作,但我陷入了疑问。
我不想要该站点的任何数据库(既不是管理页面),所以我删除了 settings.py 中的数据库设置部分然后我激活了“USE_I18N = True”和ugettext以及其他所有内容。实际上,当我转到localhost时,它会正确显示两种语言的翻译,/it//en/放在localhost:8000之后。
我现在正在尝试制作一个用于切换语言的按钮,将djangoproject代码添加到我的模板文件中,这里:

{% load i18n %}
<form action="{% url 'set_language' %}" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<select name="language">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
    {{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
<input type="submit" value="Go" />
</form>

问题是当我从下拉菜单中选择一种语言时,会出现错误

ImproperlyConfigured at /it/i18n/setlang/
settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.
Request Method: POST
Request URL:    http://localhost:8000/it/i18n/setlang/
Django Version: 1.8.2
Exception Type: ImproperlyConfigured
Exception Value:    
settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.

这是应用程序树:

sito_personale --- locale --- en --- LC_MESSAGES --- django.mo
                                                 --- django.po
                          --- it --- LC_MESSAGES --- django.mo
                                                 --- django.po
               --- pages --- migration
                         --- static
                         --- templates
               --- sito_personale
               --- manage.py

我能做些什么来解决这个问题吗?

我非常感谢您能提供的任何帮助。

4

2 回答 2

1

Django 将选定的语言保存到会话中。SESSION_ENGINE默认使用数据库,因为你不使用db这可能会导致你得到的异常。

尝试设置SESSION_ENGINEdjango.contrib.sessions.backends.file,它会将会话数据存储在磁盘上(请参阅使用基于文件的会话)。

所以在你的settings.py 中添加:

SESSION_ENGINE = 'django.contrib.sessions.backends.file'

更新

如果您的站点不需要会话支持,您也可以删除会话中间件。在这种情况下,Django 将使用 cookie 来存储语言首选项

视图期望通过 POST 方法调用,并在请求中设置语言参数。如果启用了会话支持,则视图会将语言选择保存在用户会话中。否则,它将语言选择保存在默认命名为 django_language 的 cookie 中。(可以通过 LANGUAGE_COOKIE_NAME 设置更改名称。)


更新评论中的后续问题

正如docs 中的警告一样,该i18n模式需要采用与语言无关的 urlpatterns:

警告
确保您没有在 i18n_patterns() 中包含上述 URL - 它本身需要独立于语言才能正常工作。

这是一个快速示例,说明如何从上面转换为您的urls.py :

urlpatterns = solid_i18n_patterns('',
    # Examples:
    # url(r'^$', 'sito_personale.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'', include('pages.urls')),
)

urlpatterns += patterns('',
    url(r'^i18n/', include('django.conf.urls.i18n')),
)
于 2015-06-21T15:08:07.140 回答
0

我可能已经找到了解决方案,但我不知道它是否正确/最好。我在模板代码中进行了更改:

<input name="next" type="hidden" value="{{ redirect_to }}" />

<input name="next" type="hidden" value="/" />

现在它完美无缺!我希望这是解决问题的最佳方法,如果有人能回答我对此的疑问,我将不胜感激。

于 2015-06-25T13:49:45.723 回答