Простая проблема с расположением статического файла - PullRequest
0 голосов
/ 12 января 2012

Я пошел и кое-что поправил где-то вдоль линии, и не могу найти дорогу назад.

Моя файловая структура

examplesite1

    --registration
        --A bunch of files well ignore
    --snapboard
        --static
             --Associated static folders css, js etc           
        --templates
            --snapboard
                --html files
                --some folders    
    --manage.py
    --settings.py
    --urls.py
    --__init__.py

У меня проблемы с указанием html-файлов в шаблонах / snapboard на статические файлы в snapboard / media. Код в html:

<link type="text/css" rel="stylesheet" href="{{ SNAP_MEDIA_PREFIX }}/css/yui/reset-fonts-grids.css" />

в файле настроек у меня есть то, что я считаю действительным

MEDIA_ROOT = ''

MEDIA_URL = '/snapboard/'

ADMIN_MEDIA_PREFIX = '/media/admin/'

TEMPLATE_LOADERS = (

 'django.template.loaders.filesystem.load_template_source',
 'django.template.loaders.app_directories.load_template_source',
 #'django.template.loaders.eggs.load_template_source',

)

STATICFILES_DIRS = (

)

STATICFILES_FINDERS = (

 'django.contrib.staticfiles.finders.FileSystemFinder',
 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
 'django.contrib.staticfiles',
 # 'django.contrib.staticfiles.finders.DefaultStorageFinder',

)

STATIC_URL = 'static/'

TEMPLATE_CONTEXT_PROCESSORS = (

    "django.core.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.request",
    "snapboard.views.snapboard_default_context",

)

MIDDLEWARE_CLASSES = (

    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.doc.XViewMiddleware',
    'django.middleware.csrf.CsrfResponseMiddleware',
    'pagination.middleware.PaginationMiddleware',
    'snapboard.middleware.threadlocals.ThreadLocals',
    'snapboard.middleware.ban.IPBanMiddleware',
    'snapboard.middleware.ban.UserBanMiddleware',

)

ROOT_URLCONF = 'examplesite1.urls'

TEMPLATE_DIRS = (

)

INSTALLED_APPS = (

    'examplesite1',
    'registration',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.markup',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.staticfiles',
    'snapboard',
    'pagination',

)

SNAP_MEDIA_PREFIX = MEDIA_URL + 'static/'

# Set MEDIA_ROOT so the project works out of the box

import os

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'snapboard/media')

Я провел кровавые времена, проходя через процесс устранения, пробуя множество различных комбинаций без успеха. Как правильно это кодировать.

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Какую версию Django вы используете? Если это 1.3+, вы должны использовать пакет contrib статических файлов, а каталог «media» вашего приложения должен иметь имя static, чтобы позволить Django его забрать.

В противном случае статические ресурсы внутри ваших приложений не поддерживаются, поэтому вам необходимо скопировать все эти файлы в каталог MEDIA_ROOT.

ОБНОВЛЕНО

Отбросьте весь SNAP_MEDIA_PREFIX бизнес; это ненужные и усложняющие вещи. Это все, что вам нужно:

STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'static')
STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'site_media')
MEDIA_URL = '/site_media/'

Никогда напрямую использовать STATIC_ROOT. Это каталог, куда команда управления collectstatic будет выгружать файлы и должна обслуживаться непосредственно вашим рабочим веб-сервером. Джанго никогда ничего не подает отсюда.

MEDIA_ROOT предназначен для загрузки, то есть, когда у вас есть FileField, ImageField и т. Д. На модели, фактический файл будет помещен где-то здесь. Он также должен напрямую обслуживаться вашим веб-сервером. Не размещайте здесь свои статические ресурсы.

Do помещает все ваши статические ресурсы в каталог static вашего приложения. Каталог static каждого приложения будет обслуживаться Django при разработке под STATIC_URL. Так, <project_root>/some_app/static/style.css будет доступно на /static/style.css через ваш браузер. Из-за этого обычно хорошей идеей является пространство имен ваших статических каталогов, то есть вместо этого используйте <project_root>/some_app/static/some_app/style.css, чтобы URL стал /static/some_app/style.css. Таким образом, ваши статические файлы не перезаписывают друг друга.

Если вам нужны статические ресурсы для всего проекта, создайте в вашем проекте совершенно другой каталог (я обычно использую assets), а затем добавьте его в STATICFILES_DIRS следующим образом:

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__), 'assets'),
)
0 голосов
/ 12 января 2012

сделайте ur url носителя равным MEDIA_URL = '/snapboard/', и в вашем коде измените href="{{ SNAP_MEDIA_PREFIX }}/css/yui/reset-fonts-grids.css" на href="{{ SNAP_MEDIA_PREFIX }}css/yui/reset-fonts-grids.css", потому что {{ SNAP_MEDIA_PREFIX }}/css/ отличается от {{ SNAP_MEDIA_PREFIX }}css/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...