Как уже указывали люди, вы должны поместить свою директиву static_dir
перед шаблоном /.*
Однако это не единственное, о чем вы должны знать.
Поместив эту директиву в app.yaml, вы заставляете веб-сервер AppEngine (будь то сервер разработки или производства) обрабатывать путь /static
, и вам нужно, чтобы все статические файлы находились внутри статического каталога. Это означает, что вам придется запускать python manage.py collectstatic
каждый раз, когда вы меняете что-либо в своих статических файлах (особенно если у вас есть/используете приложения со статическими файлами, например, admin
или django-tinymce
), просто для проверки этих изменений на локальном сервере.
Так как этого избежать? По умолчанию staticfiles предоставляет хелперы для обслуживания этих файлов на сервере разработки без запуска collectstatic каждый раз. Проблема заключается в конфликте имен каталогов, описанном в предыдущем абзаце: Django не может перехватывать запросы к пути к вашим статическим файлам, так как они обрабатываются сервером приложений. Вы можете решить эту проблему, используя разные пути на сервере разработки и рабочем сервере:
# in settings.py
if DEBUG:
STATIC_URL = '/devstatic/'
else:
STATIC_URL = '/static/'
(djangoappengine устанавливает для DEBUG значение True на сервере разработки). Вы можете оставить ADMIN_MEDIA_PREFIX = '/static/admin/'
, но не забудьте запустить collectstatic хотя бы один раз, прежде чем использовать admin.
Конечно, не забывайте использовать в шаблонах {{ STATIC_URL }}path/to.css
вместо /static/path/to.css
.
О, и я предполагаю, что вы различаете каталог для исходных статических файлов, с которыми вы работаете, и каталог, в котором должны быть собраны статические файлы. Я использую это в своих settings.py:
STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'sitestatic')
STATICFILES_DIRS = (
os.path.join(os.path.dirname(__file__), 'static'),
)
Это означает: вы помещаете свои статические файлы в каталог static
(и в каталоги static
ваших приложений), collectstatic
собирает их в каталог sitestatic
. Соответствующая директива app.yaml
- url: /static
static_dir: sitestatic
Наконец, вы можете настроить app.yaml
так, чтобы каталоги static
и media
игнорировались при загрузке вашего приложения, поскольку все статические файлы будут собираться и обслуживаться из sitestatic
. Однако вы должны установить это только во время загрузки (иначе эти файлы не будут доступны на сервере отладки)
person
LXj
schedule
14.12.2011