LINUX.ORG.RU

[туплю][django] Отдача статики тестовым веб-сервером.


0

1

Собственно, для тестирования дизайна и жабаскриптов потребовалось, чтобы статику мне отдавал вебсервер, который идет в комплекте самой джанги. Делал все по ману: https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-file...

Дерево директорий:

|-egallery (директория проекта)
| |-gallery (джанговское приложение)
| |-templates
| |-public
| | |-site_media
| | | |-smth.css
| | | |-smth.js
settings.py и urls.py, соответственно лежит в egallery.

Кусок settings.py:

DEBUG = True
PROJECT_ROOT = os.path.dirname(__file__).replace('\\','/')
MEDIA_ROOT = PROJECT_ROOT+'/public/site_media/'
MEDIA_URL = '/site_media/'
STATIC_ROOT = PROJECT_ROOT+'/public/site_media/'
STATIC_URL  = '/site_media/'

Кусок urls.py:

from django.conf import settings

if settings.DEBUG:
    urlpatterns += patterns('django.contrib.staticfiles.views',
        url(r'^site_media/(?P<path>.*)$', 'serve'),
    )

Соответственно, по запросу http://127.0.0.1:8000/site_media/smth.css вместо ожидаемой css-ки вываливается 404 страница c:

Request Method:	GET
Request URL:	http://127.0.0.1:8000/site_media/smth.css
'smth.css' could not be found

Через staticfiles_urlpatterns() эффект абсолютно тот же.

Делай каталоги static и media в папке с проектом (первый - чисто для статических css/js/хз файлов, второй - для загружаемых через браузер) и все заработает само.

enchantner ()

за это отвечает django.contrib.staticfiles в шаблонах внедряем, что-то типа

{% load static %}
...
<link rel="stylesheet" type="text/css" href="{% get_static_prefix %}main.css" />

или второй вариант, который вы найдете в документации

расположение по умолчанию в <app>/static/

hizel ★★★★★ ()
Ответ на: комментарий от hizel

Расписал подробно, Ctrl+Enter вместо Enter жмакнул при создании темы.

strangeman ★★★★ ()
Ответ на: комментарий от power

settings.py:

DEBUG = True
PROJECT_ROOT = os.path.dirname(__file__).replace('\\','/')
MEDIA_ROOT = PROJECT_ROOT+'/public/site_media/'
MEDIA_URL = '/site_media/'
STATIC_ROOT = PROJECT_ROOT+'/public/site_static/'
STATIC_URL  = '/site_static/'

Кусок urls.py:

from django.conf import settings

if settings.DEBUG:
    urlpatterns += patterns('django.contrib.staticfiles.views',
        url(r'^site_static/(?P<path>.*)$', 'serve'),
    )

http://127.0.0.1:8000/site_static/smth.css :

Request Method:	GET
Request URL:	http://127.0.0.1:8000/site_static/smth.css
'smth.css' could not be found

Те же яйца, только в профиль, увы.

strangeman ★★★★ ()

что-то у вас понакручено

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT=''
hizel ★★★★★ ()
Ответ на: комментарий от strangeman
  • создаю новый проект,
  • добавляю в settings.py настройки DATABASES и делаю syncdb,
  • меняю STATUC_URL на нужный,
  • создаю приложение exam,
  • создаю внутри exam/ папку static/ и файлик ololo.css,
  • в settings.py добавляю в INSTALLED_APPS exam,
  • запускаю
  • ....
  • PROSIT!
[11/Jan/2012 01:25:20] "GET /foo_static/ololo.css HTTP/1.1" 200 6
hizel ★★★★★ ()

как можно было так натупить читая документацию? всегда знаете-ли забавляла маничка ДЛАТЬ ИНАЧЕ не зная как правильно. сделал бы сначала как пишут, проблем бы не было.

trashymichael ★★★ ()
Ответ на: комментарий от trashymichael

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

strangeman ★★★★ ()
Ответ на: комментарий от strangeman

смуту, правда, вносит обилие рецептов которые уже не актуальны

trashymichael ★★★ ()
DEBUG = True
PROJECT_ROOT = os.path.dirname(__file__).replace('\\','/')
MEDIA_ROOT = PROJECT_ROOT+'/public/site_media/'
MEDIA_URL = '/site_media/'
STATIC_ROOT = PROJECT_ROOT+'/public/site_media/'    # косяк здесь, читай комментарии в умолчальном конфиге. Этот путь надо прописывать в STATICFILES_DIRS
STATIC_URL  = '/site_media/'

Кстати:

https://docs.djangoproject.com/en/1.3/howto/static-files/#deploying-static-files-in-a-nutshell

Note

In previous versions of Django, it was common to place static assets in MEDIA_ROOT along with user-uploaded files, and serve them both at MEDIA_URL. Part of the purpose of introducing the staticfiles app is to make it easier to keep static files separate from user-uploaded files.

For this reason, you need to make your MEDIA_ROOT and MEDIA_URL different from your STATIC_ROOT and STATIC_URL. You will need to arrange for serving of files in MEDIA_ROOT yourself; staticfiles does not deal with user-uploaded files at all. You can, however, use django.views.static.serve() view for serving MEDIA_ROOT in development; see Serving other directories.

Lonli-Lokli ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.