Как i18n перестал работать

Я всегда использую этот скрипт для компиляции django.ПО и он всегда работал:

#!/bin/sh
django-admin.py makemessages -a
django-admin.py compilemessages

внезапно он перестал работать, с этой ошибкой:

$ i18n.sh
Traceback (most recent call last):
  File "c:/Python34/Scripts/django-admin.py", line 5, in <module>
    management.execute_from_command_line()
  File "c:Python34libsite-packagesdjangocoremanagement__init__.py", line
385, in execute_from_command_line
    utility.execute()
  File "c:Python34libsite-packagesdjangocoremanagement__init__.py", line
377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "c:Python34libsite-packagesdjangocoremanagementbase.py", line 288,
 in run_from_argv
    self.execute(*args, **options.__dict__)
  File "c:Python34libsite-packagesdjangocoremanagementbase.py", line 338,
 in execute
    output = self.handle(*args, **options)
  File "c:Python34libsite-packagesdjangocoremanagementbase.py", line 533,
 in handle
    return self.handle_noargs(**options)
  File "c:Python34libsite-packagesdjangocoremanagementcommandsmakemessag
es.py", line 283, in handle_noargs
    potfiles = self.build_potfiles()
  File "c:Python34libsite-packagesdjangocoremanagementcommandsmakemessag
es.py", line 299, in build_potfiles
    file_list = self.find_files(".")
  File "c:Python34libsite-packagesdjangocoremanagementcommandsmakemessag
es.py", line 358, in find_files
    ignored_roots = [os.path.normpath(p) for p in (settings.MEDIA_ROOT, settings
.STATIC_ROOT)]
  File "c:Python34libsite-packagesdjangocoremanagementcommandsmakemessag
es.py", line 358, in <listcomp>
    ignored_roots = [os.path.normpath(p) for p in (settings.MEDIA_ROOT, settings
.STATIC_ROOT)]
  File "c:Python34libntpath.py", line 491, in normpath
    if path.startswith(special_prefixes):
AttributeError: 'NoneType' object has no attribute 'startswith'
processing file django.po in c:UsersDeboraworkspaceoptiopti2.0projectloca
lept_BRLC_MESSAGES

у кого-нибудь есть идеи?

Я не знаю, чем это вызвано. недавно я обновил django 1.7 до 1.7.1, установил некоторые несвязанные пакеты, вот что я помню, что это могло повлиять.

6 ответов


просто набор STATIC_ROOT в вашем settings.py файл.

это ошибка в Django 1.7.1 и должны быть удалены в Django 1.7.2

(поскольку Джанго 1.6.2 STATIC_ROOT по умолчанию None до ''.)


была такая же проблема после обновления до Django 1.7

я исправил это, указав модуль настроек каждый раз, когда я запускаю django-admin.py:

cd ~/myproject/myproject # where the ``locale`` folder exists
PYTHONPATH=~/myproject django-admin.py makemessages --settings=myproject.settings -l <language>

Update: это ошибка, исправленная в Django 1.7.2 см: https://docs.djangoproject.com/en/1.7/releases/1.7.2/ https://code.djangoproject.com/ticket/23717


сначала определите свой локальный путь для makemessages

LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale/'),
)

в терминале

$python manage.py makemessages-l pl

перейдите в папку и откройте файл edit the .по файл

потом в терминале

$python manage.py compilemessages

он отлично работает в Django 1.7 и обновлен.

Я думаю, это может вам помочь.


проблема в том, что вы не настроили свой STATIC_ROOT и MEDIA_ROOT значение настройки. После установки этого типа:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

Я использую make_messages.sh сценарий:

#!/usr/bin/env bash

for dir in `find -maxdepth 1 -type d ! -iname ".*"`; do
    echo $dir
    tmp=$(basename $dir)
    dir="$tmp"
    skip_this=0
    for tmp in static media; do
        if [ "$dir" = "$tmp" ]; then
            skip_this=1
            break
        fi
    done

    if [ "$skip_this" = "1" ]; then
        echo Skipping $dir
        continue
    fi

    cd `dirname `/$dir
    if [ ! -d locale ] ; then
        echo Creating 'locale' directory
        mkdir locale
    fi
    ../manage.py makemessages -l pl -l en -l de
        cd ..
done

и после выполнения make_messages.sh:

./static_page
processing locale pl
processing locale en
processing locale de
./common
Creating locale directory
processing locale pl
processing locale en
processing locale de

а это мой compile_messages.sh сценарий:

#!/usr/bin/env bash

for dir in `find -maxdepth 1 -type d ! -iname ".*"`; do
        echo $dir
        tmp=$(basename $dir)
        dir="$tmp"
        skip_this=0
        for tmp in static static_custom media; do
                if [ "$dir" = "$tmp" ]; then
                        skip_this=1
                        break
                fi
        done

        if [ "$skip_this" = "1" ]; then
                echo Skipping $dir
                continue
        fi

        cd `dirname `/$dir
        ../manage.py compilemessages -l pl -l en -l de
        cd ..
done

у меня были те же проблемы с использованием Django 1.7.1.

я исправил это, изменив команду:django-admin.py до python manage.py.

Итак, вся моя команда выглядит так:

python manage.py makemessages --locale=en --ignore=templates/admin --ignore=project/settings.py


У меня был тот же ussue. Я попытался запустить с django-admin и получил эту проблему.

когда я запускаю его с manage.py он работает нормально.

python manage_local.py makemessages -l cs --settings=gprojects.settings_local

использовать manage.py, manage_local.py это моя альтернативная версия.