0

我知道,我在问类似的问题,问了很多次。但从不同的角度来看。

我正在做一个小 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模板渲染没有不同的结果

最后,是的,我在测试之间清除了浏览器缓存。

关于我缺少什么的任何建议?如何调试这种奇怪的行为?

4

1 回答 1

0

好吧,我很抱歉,有点尴尬。

今天调试django/utils/translate/trans_real.py时,我意识到登台服务器settings.py文件中存在一个细微的拼写错误。

我数不清昨天检查了多少次配置文件,没有抓住重点!

再次抱歉

于 2013-08-01T10:17:30.320 回答