AttributeError: объект 'tuple' не имеет атрибута 'startswith'

Совершенно новый для кодирования, извините за простые вопросы. Я получаю эту ошибку атрибута при запуске python manage.py collectstatic. Я редактирую settings.py. У меня Django 1.5.1 и Python 2.7.5. Любая помощь приветствуется и благодарит заранее (снова).

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py", line 61, in isabs
    return s.startswith('/')
AttributeError: 'tuple' object has no attribute 'startswith'

Теперь, конечно, я никогда не сталкивался с posixpath.py.

здесь содержимое settings.py (минус db info и таковое):

MEDIA_ROOT = "os.path.join(os.path.dirname(os.path.dirname(__file___))", "static", "media"

MEDIA_URL = '/media/'

STATIC_ROOT = "os.path.join(os.path.dirname(os.path.dirname(__file__))", "static", "static-only"

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    "os.path.join(os.path.dirname(os.path.dirname(__file__))", "static", "static",
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

SECRET_KEY = 'xxxxxxxxx'

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'mvp_landing.urls'

WSGI_APPLICATION = 'mvp_landing.wsgi.application'

TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(os.path.dirname(__file__)), "static", "templates",
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'south',
    'join',   
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

Ответ 1

Вы делаете это неправильно. Вы не должны превращать свой код в кавычки. Посмотрите, как это должно быть

Он должен выглядеть следующим образом:

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__), "static")
)

Также он относится к вашим настройкам MEDIA_ROOT и STATIC_ROOT.

Ответ 2

@Крис

STATIC_ROOT и MEDIA_ROOTS являются абсолютными путями, и они не могут быть кортежами, поэтому не допускается "," (запятая) Поэтому укажите абсолютный путь как "/your/static/file/absolute/path"

Надеюсь, это поможет:)

Ответ 3

STATIC_ROOT = os.path.join(BASE_DIR, "static_in_pro","static_root"),

Пожалуйста, удалите запятую в конце статического корня

STATIC_ROOT = os.path.join(BASE_DIR, "static_in_pro","static_root")

Ответ 4

Резюме

Если вы новичок в Django (как и я) и сталкиваетесь с этой проблемой, я рекомендую просмотреть книгу Two Scoops от Django, в частности, у них есть шаблон GitHub с хорошим расположением приложений здесь. В частности, вы хотите посмотреть:

  • Их base.py 'файл под настройками, в котором есть все конфигурации для "STATIC_ROOT", "MEDIA_ROOT" и т.д.
  • Посмотрите, как их настройки соответствуют их структуре папок (см. ниже) twoscoopsrecommendsettings

Octotree (необязательно)

В качестве побочного примечания, если вы используете GitHub в качестве источника управления, я настоятельно рекомендую получить это расширение Chrome под названием Octotree здесь. Это позволяет просматривать макет папки любого репозитория GitHub.

octotree extension