2013-07-29 45 views
12

Zupełnie nowa w kodowaniu, przepraszam za proste pytania. Otrzymuję ten błąd atrybutu podczas uruchamiania python manage.py collectstatic. Edytuję settings.py. Mam Django 1.5.1 i Python 2.7.5. Każda pomoc jest doceniana i dziękuję z góry (ponownie).AttributeError: "krotka" obiekt nie ma atrybutu "startswith"

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' 

Teraz oczywiście nigdy nie zadzierałem z posixpath.py.

oto zawartość settings.py (info minus dB i takie):

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', 
) 
+7

W moim przypadku miałem błąd kopiowania/wklejania. Moje 'STATIC_ROOT =' zakończyło się przecinkiem. – jozxyqk

Odpowiedz

11

robisz to źle. Nie powinieneś obracać swojego kodu w cudzysłowie. Watch here how it should be

Powinno być tak:

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

również należy do MEDIA_ROOT i STATIC_ROOT ustawień.

+0

Dziękuję za odpowiedź. Spróbowałem tego i zadziałało. Wciąż jestem bardzo nowy. Dzięki! –

2

Podsumowanie

Jeśli jesteś nowy w Django (jak ja) i napotkasz ten problem, polecam patrząc na książki dwie miarki Django, w szczególności mają szablon GitHub z dobrym układ aplikacji here. W szczególności warto spojrzeć na:

  1. Ich pliku „” pod base.py ustawień, który ma wszystkie konfiguracje dla „STATIC_ROOT”, „MEDIA_ROOT” itp
  2. zobaczyć, jak ich ustawienia odpowiada ich folderu struktura (patrz niżej) twoscoopsrecommendsettings

Octotree (opcjonalnie)

na marginesie, jeśli używasz GitHub jako kontroli źródła, I highl Zalecamy uzyskanie tego rozszerzenia Chrome o nazwie Octotree dostępnego here. Pozwala to wyświetlić układ folderów dowolnego repozytorium GitHub.

octotree extension

4

@chris

STATIC_ROOT i MEDIA_ROOTS są ścieżki bezwzględne i nie mogą być krotki więc nie ma "" (przecinek) jest dozwolone, więc wspomnieć bezwzględną ścieżkę jako „/ twoja/statyczne/plik/absolutna/ścieżka”

nadzieję, że pomoże :)

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

usuń przecinek na końcu statycznego korzenia

STATIC_ROOT = os.path.join(BASE_DIR, "static_in_pro","static_root") 
Powiązane problemy