我知道,我在问类似的问题,问了很多次。但从不同的角度来看。
我正在做一个小 django 项目。在开发了基本功能之后,现在我正在与多语言作斗争。
我能够在我的 Windows 笔记本电脑中使用一个简单的测试模板。但是当我将此项目复制到测试(CentOS)服务器时,它不起作用。
以后我做了什么。
基本环境(两个系统)是带有 python 2.7、django 1.5、mysql-python 1.2.3 和 django-localeURL 1.5 的 virtualenv。获取文本 v.1.7。
这些是 settings.py 的相关选项(注:我使用 django-localeURL 应用程序)
# Django settings for contact_site project.
import os.path
PROJECT_DIR = os.path.dirname(__file__) # this is not Django setting.
# ... skip
LANGUAGE_CODE = 'it'
#...skip
USE_I18N = True
USE_L10N = True
#...skip
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
# 'django.template.loaders.eggs.Loader',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
# LocaleMiddleware after SessionMiddleware: it needs sessions
# commented out LocaleMiddleware to avoid conflict with LocaleURLMiddleware
# 'django.middleware.locale.LocaleMiddleware',
# LocaleURLMiddleware to manage multi language urls
'localeurl.middleware.LocaleURLMiddleware',
# CommonMiddleware after LocaleURLMiddleware or will not work APPEND_SLASH
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
# Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
# ... skip
_ = lambda s: s
LANGUAGES = (
('en', _(u'English')),
('it', _(u'Italiano')),
('fr', _(u'Francais')),
)
LOCALE_PATHS = (
# in windows laptop
'C:/...skip.../virtualenvs/djprj/contact_site/locale',
# in centos staging server
# '/var/www/html/virtualenvs/djprj/contact_site/locale',
)
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
'django.core.context_processors.i18n',
'django.contrib.auth.context_processors.auth',
)
TEMPLATE_DIRS = (
# ...skip
os.path.join(PROJECT_DIR, "templates"),
)
INSTALLED_APPS = (
# localeurl to manage multi language urls. it must be the 1st one!
'localeurl',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# ... skip
# my application
'contact',
)
# ... skip
我的项目 urls.py (仅限家庭):
# ... skip
urlpatterns += patterns('',
url(r'^$', 'contact_site.views.home', name='home'),
)
我的views.py(仅限家庭):
#... skip
def home(request):
return render(request, 'minimalistic.html', {})
最后是我的简约模板:
{% load debug_tags %}
{% load i18n %}
<!DOCTYPE html>
<html>
<head>
<title>TITLE</title>
</head>
<body>
{# {% set_trace %} #}
<p>{% trans "Hello" %}</p>
<p>{% blocktrans %}Hello guys{% endblocktrans %}</p>
lingua richiesta: {{ request.LANGUAGE_CODE }}
</body>
</html>
然后我使用
django-admin.py makemessages --all
我编辑了字典(使用 poedit),最后,运行开发服务器,在 windows 中我看到了令人垂涎的结果:
从浏览器偷看http://127.0.0.1:8000/it
给了我药膏...
同时得到http://127.0.0.1:8000/en
给了我你好...
不幸的是,在舞台系统中,我从两个 URL 都得到了 Hello ...。
为了安全起见,在centos中我什至尝试过
django-admin.py compilemessages
这个操作没问题,但是对于minimalistic.html模板渲染没有不同的结果
最后,是的,我在测试之间清除了浏览器缓存。
关于我缺少什么的任何建议?如何调试这种奇怪的行为?