我正在尝试使用Django和Python制作双语(意大利语和英语)网站。
我跟着this小教程,我一直有疑问
我不想要这个站点的任何数据库(既不是管理员页面),所以我删除了 settings.py 中的数据库设置部分,然后我激活了“USE_I18N = True”和 ugettext < / em>以及其他一切。事实上,当我去 localhost 时,它会正确显示 / it / 和 / en / 之后的语言翻译本地主机: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
我能解决这个问题吗?
我非常感谢您提供的任何帮助。
答案 0 :(得分:1)
Django将所选语言保存到会话中。 SESSION_ENGINE
默认使用数据库,因为您不使用db
,这可能会导致您获得异常。
尝试将SESSION_ENGINE
设置为django.contrib.sessions.backends.file
,而不是将会话数据存储在磁盘上(请参阅Using file-based sessions)。
因此,在 settings.py 中添加:
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
更新
如果您的网站不需要会话支持,您还可以删除会话中间件。在这种情况下,Django将使用cookie来存储语言偏好
视图期望通过POST方法使用语言调用 请求中的参数集。如果启用了会话支持,则视图 将语言选择保存在用户的会话中。否则,它会节省 默认情况下命名的cookie中的语言选择 django_language。 (名称可以通过改变 LANGUAGE_COOKIE_NAME设置。)
更新来自评论的后续问题
正如warning in the 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')),
)
答案 1 :(得分:0)
我可能找到了解决方案,但我不知道它是否正确/最好。 我在模板代码中更改了:
<input name="next" type="hidden" value="{{ redirect_to }}" />
到
<input name="next" type="hidden" value="/" />
现在它完美无瑕!我希望这是解决问题的最好方法,如果有人能回答我对它的疑问,我真的很感激。