2013-05-22 2 views
0

Я установил Django 1.5.1 с MySQL и mod_wsgi на ubuntu. После того, как я импортировал мой проект от локального компьютера на сервер, я получаю эту ошибку, посетив все URL-адреса:Как решить ошибку «Пустой статический префикс не разрешен» в Django?

**ImproperlyConfigured at /** 
Empty static prefix not permitted 
Request Method: GET 
Request URL: http://50.7.177.122/ 
Django Version: 1.5.1 
Exception Type: ImproperlyConfigured 
Exception Value:  
Empty static prefix not permitted 
Exception Location: /srv/projects/venv/lib/python2.7/site-packages/django/conf/urls/static.py in static, line 22 
Python Executable: /usr/bin/python 
Python Version: 2.7.3 
Python Path:  
['/srv/projects/app/danial', 
'/srv/projects/app', 
'/srv/projects/venv/lib/python2.7/site-packages', 
'/srv/projects/venv/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', 
'/srv/projects/venv/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg', 
'/srv/projects/venv/lib/python2.7/site-packages', 
'/srv/projects/venv/lib/python2.7/site-packages/PIL', 
'/usr/local/lib/python2.7/dist-packages/virtualenv-1.9.1-py2.7.egg', 
'/usr/local/lib/python2.7/dist-packages/virtualenvwrapper-4.0-py2.7.egg', 
'/usr/local/lib/python2.7/dist-packages/stevedore-0.8-py2.7.egg', 
'/usr/local/lib/python2.7/dist-packages/virtualenv_clone-0.2.4-py2.7.egg', 
'/usr/local/lib/python2.7/dist-packages/pip-1.3.1-py2.7.egg', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', 
'/usr/lib/python2.7/lib-tk', 
'/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', 
'/usr/local/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages'] 

Мое имя проекта Даниал, содержит приложение, галерея. Моя статическая папка, расположенная в/danial/gallery/static, я так запуталась. Вот все статические связанные линии в моем проекте:

###settings.py 
STATIC_ROOT = '/srv/projects/app/danial/gallery/static/' 
STATIC_URL = '/static/' 
STATICFILES_DIRS = ('/srv/projects/app/danial/gallery/static/',) 

###apache setting 
Alias /static/ /srv/projects/venv/lib/python2.7/site-packages/django/contrib/admin/static/ 

###urls.py 

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

urlpatterns += staticfiles_urlpatterns() 
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

Это хорошо работает на моем местном. Что я знаю?

+1

Я думаю, что ваш псевдоним 'Alias' не соответствует вашему пути' STATIC_ROOT' или 'STATICFILES_DIRS'. Это намеренно? –

+0

Я изменил 'Alias' статического на тот же адрес, что и' STATIC_ROOT', но все равно получаю ошибку. – sheshkovsky

+0

Вы запустили 'manage.py collectstatic'? Или просто развернуто на сервер со статикой, уже собранной? – J0HN

ответ

2

Я изменил псевдоним статического от
/srv/projects/venv/lib/python2.7/site-packages/django/contrib/admin/static/ к /srv/projects/app/danial/gallery/static/ и удалить статические связанные строки из urls.py.

Мне просто нужно скопировать ../django/../static/admin в ../projects/../static/admin. Теперь проект django работает отлично.

2

В urls.py, когда вы используете:

static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

вам нужно определить MEDIA_URL ни с пустым значением в settings.py.

И определить STATIC_URL ни с пустым значением в settings.py, если вы используете:

static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

Кроме того, это работа, когда DEBUG установлен в True (В процессе разработки), Вот исходный код sattic:

def static(prefix, view=serve, **kwargs): 
    if not settings.DEBUG or (prefix and '://' in prefix): 
     return [] 
    elif not prefix: 
     raise ImproperlyConfigured("Empty static prefix not permitted") 
    return [ 
     url(r'^%s(?P<path>.*)$' % re.escape(prefix.lstrip('/')), view, kwargs=kwargs), 
    ]