Ссылка на таблицу стилей с помощью Django - PullRequest
1 голос
/ 26 августа 2011

Я нашел много разных примеров того, как это сделать, все они немного отличаются в том, что они говорят, установить MEDIA_URL, STATIC_URL, MEDIA_ROOT, MEDIA_URL.Файлы моего проекта структурированы следующим образом:

myproject/
    images/ (user-uploaded)
    media/ (empty so far)
    settings.py
    static/
        css/
            styles.css
        fonts/
    templates/
        auth/
            base.html
            login.html
        index.html
    urls.py

И, конечно, в корневой папке есть каталоги приложений.Чтобы мои изображения отображались в шаблоне индекса, я сделал следующее:

urls.py:

from django.conf import settings

(r'%s(?P<path>.*)' % settings.MEDIA_URL[1:], 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),

settings.py (это было по умолчанию):

MEDIA_ROOT = ''

MEDIA_URL = ''

STATIC_ROOT = ''

STATIC_URL = '/static/'

ADMIN_MEDIA_PREFIX = '/static/admin/'

Сайт, который я создаю, находится на переднем крае всего на одной странице.Как получить таблицу стилей для правильной связи?Я не совсем уверен, в чем разница между всеми этими настройками каталогов или почему я использовал бы один над другим ... или какой лучший способ (если таковой имеется) состоит в том, чтобы структурировать все это, с тем, где поставить CSS,JavaScript, шрифты, статические изображения, загруженные пользователем изображения и т. д.

Ответы [ 2 ]

3 голосов
/ 27 августа 2011

В pre-Django 1.3 существовали только две настройки:

MEDIA_ROOT : Абсолютный путь файловой системы к медиафайлам

MEDIA_URL: Абсолютный URL-адрес медиа-файлов, с доменом или без него.

В Post-Django 1.3 был представлен пакет contrib для статических файлов, и он довольно запутанный впервые.Вам понадобятся следующие настройки:

MEDIA_ROOT : Абсолютный путь файловой системы к загрузке пользователя

MEDIA_URL : Абсолютный URL-адрес для загрузки пользователя, сили без домена

STATIC_ROOT : Абсолютный путь файловой системы к каталогу статических файлов.Это папка, используемая командой управления collectstatic.НЕ помещайте сюда файлы вручную.

STATIC_URL : Абсолютный URL-адрес каталога статических файлов с доменом или без него

Затем для каждого из ваших приложенийвы создаете «статический» каталог внутри, и это , куда идут ваши статические файлы.В процессе разработки Django автоматически подает эти файлы в STATIC_URL.В производственной среде вы должны запустить команду управления collectstatic, чтобы все они были перемещены в «статический» каталог проекта, который затем является сервером под STATIC_URL.

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

STATICFILES_DIRS = (
    "/absolute/path/to/myproject/assets/",
)

Здесь я использовал каталог с названием «assets» для статических файлов по всему проекту.Вы можете назвать каталог как угодно, только он НЕ МОЖЕТ совпадать с STATIC_ROOT.

Последнее, что сбивает людей с толку, - это обслуживание администратора.Все, что вам нужно для этого сделать, это включить настройку:

ADMIN_MEDIA_PREFIX = STATIC_URL+'admin/'
2 голосов
/ 26 августа 2011

Медиа - для загруженных пользователем файлов, статические - для ваших CSS и других файлов, поэтому вы должны создать там каталоги для ваших статических файлов, таких как js и css.

Вы все правильно сделали, потому что что-то подобное в официальной документации в Django.Я оставлю, как мой друг сказал мне, чтобы сервер статических файлов на нескольких машинах:

# settings.py
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.join(PROJECT_DIR, 'models'))
PROJECT_URL = 'http://127.0.0.1:8000'

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')

MEDIA_URL = PROJECT_URL + '/media/'

STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')

STATIC_URL = PROJECT_URL + '/static/'

ADMIN_MEDIA_PREFIX = PROJECT_URL + '/static/admin/'

# Additional locations of static files
STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, 'static'),
    os.path.join(PROJECT_DIR, 'media'),
)
# urls.py
urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
        (r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_ROOT}),
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...