Почему STATIC_URL не может начинаться с 'http://' или' / 'для сервера разработчиков DJango? - PullRequest
1 голос
/ 17 января 2012

Недавно я хотел добавить функциональность на свой сайт.Чтобы ускорить этот процесс, я хотел подавать статические файлы с моей машины разработчика.В частности, я хотел использовать встроенный сервер разработчика, который поставляется с DJango v1.3.1;Модификация рабочего сервера - плохая идея, и необходимость загружать статические файлы каждый раз, когда они изменяются, тратит впустую много времени и энергии.

Однако разработка девайса для игры в мяч была кошмаром!Я только что потратил около 4 часов, пытаясь обработать статические данные, и оказалось, что все, что я ошибся, было то, что в начале STATIC_URL серверу dev не нравился символ '/'?Я хотел бы знать, почему и / или что я делаю неправильно ...

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

Мой проект выглядит так:

<project root>
    /app1
        ..various files..
    /app2
        ..various files..
    /static
        /style
            Style.css
    /templates
manage.py
settings.py
settings_dev.py
settings_production.py
urls.py

Мой settings.py определяет, на каком сервере мы работаем, и вызывает соответствующий settings_dev.py илиsettings_production.py, который работает хорошо, и все мои настройки работают нормально на производственном сервере.

My settings_dev.py имеет следующее:

DEBUG = True

ADMINS = (
    ('Jon', 'jon@mydomain'),
)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mydb',
        'USER': 'dbuser',
        'PASSWORD': 'dbpassword',
        'HOST': '',
        'PORT': '',
    }
}

MEDIA_ROOT = ''
MEDIA_URL = '/media'
STATIC_ROOT = 'C:/Users/jon/PycharmProjects/myproject/static'
STATIC_URL = 'http://192.168.1.4/static'
STATICFILES_DIRS = ()
ADMIN_MEDIA_PREFIX = 'http://192.168.1.4/static/admin/'
TEMPLATE_DIRS = ('C:/Users/jon/PycharmProjects/myproject/templates',)

IS_PRODUCTION_SERVER=False

.. и urls.py включает следующее:

from django.conf.urls.defaults import patterns, include, url
from django.conf import settings

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^$', 'app1.views.index'),
    (r'^/$', 'app1.views.index'),
    url(r'^admin/', include(admin.site.urls)),
)

if settings.IS_PRODUCTION_SERVER is False:
    print 'Adding DJango static serving from %s'%settings.STATIC_ROOT
    urlpatterns += patterns('',
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.STATIC_ROOT,
        }),
   )

Это работает так же, как мои шаблонывозьмите статический URL и дайте мне (например) http://192.168.1.4/static/style/Style.css , но , если я изменю STATIC_URL на /static

... и затем посетите http://192.168.1.4/static/style/Style.css, я получаюОшибка 404:

'\style\Style.css' could not be found

Так что же происходит?

1 Ответ

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

Есть несколько специальных помощников для маршрутизации ссылок на статические файлы.

from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

if settings.IS_PRODUCTION_SERVER is False:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += staticfiles_urlpatterns()

Кроме того, я никогда не проверял источники, чтобы увидеть, если это имеет значение, но во всех примерах в исходных settings.py STATIC_ROOT,STATIC_URL, MEDIA_URL и MEDIA_ROOT заканчиваются на /, вы можете попробовать.

Если вы в отчаянии, после слишком многих запусков проектов Django, где я забываю установить что-то, я сделал универсальную универсальную базу djangoпроект, вы можете найти его на https://github.com/riquito/Semiautomatic-django-setup

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