2015-06-21 82 views
2

我想用Django和Python制作双语言(意大利语和英语)网站。 我跟着this小教程,我陷入了疑问。
我不想对本网站的任何数据库(没有管理页面),所以我在settings.py删除的数据库设置部分,然后我激活“USE_I18N =真”和ugettext和一切。事实上,当我去本地主机它显示正确与两种语言翻译的/它//EN/本地主机后放:8000
我想,现在,要用于切换语言的按钮,添加djangoproject代码到我的模板文件,在这里:Django国际化静态网站

{% 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 

有什么我可以做的解决这个问题?

我真的很感谢您能提供任何帮助。

+1

你能提供你的设置?我想它与如何存储语言首选项有关^^ – spectras

+0

你的意思是整个settings.py代码?如果是这样的话,你在这里:http://codepad.org/7xUdEGKv 我觉得有可能是某种在urls.py错误太:http://codepad.org/pkUn1xI4 –

回答

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方法被调用,以语言 参数在请求中设置。如果启用了会话支持,则视图 将在用户会话中保存语言选项。否则,它会将默认名为 django_language的Cookie中的语言选择保存为 。 (名称可以通过 LANGUAGE_COOKIE_NAME设置进行更改。)


更新从评论

后续问题正如warning in the docs,在i18n模式需要在语言独立的URL模式:

警告
请确保您不包含上面的URL withi n i18n_patterns() - 它需要与语言无关才能正常工作。

下面是如何可能从上面翻译成你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')), 
) 
+0

好,也有一些进展:现在我没有得到dabatase错误了,但是当我点击更改语言(即默认语言为“意大利”,我选择“英语”)的页面加载,但在形式的值变回默认一个。 –

+0

并且语言是否保持不变(意大利语)还是页面显示英语? – sthzg

+0

它仍然是一样的。 –

0

我可能已经找到了解决办法,但我不知道这是否是正确的/最好的。 我已经改变,在模板代码:

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

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

,现在,它完美的作品!我希望这是解决问题的最好方法,如果有人能够回答我的疑问,我会非常感激。