Django: проблема с путями к шаблонам? - PullRequest
0 голосов
/ 23 мая 2011

Итак, после нескольких часов раздражения я наконец-то запустил свой сайт django!Единственная проблема, которая у меня есть сейчас, заключается в том, что все таблицы стилей / изображения связаны неправильно.Или, ну, они связаны правильно, но django не даст мне файлы, вроде.

Вот как это настроено:

views.py:

from django.shortcuts import render_to_response

def home(request):
    return render_to_response('index.html')

urls.py:

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

urlpatterns = patterns('',
    # Examples:
    url(r'^$', 'mysite.views.home', name='home'),
)

, и это вызывает index.html, но не отображаются никакие другие файлы, такие как изображения, таблицы стилей и т. д. Как мне решить эту проблему?У меня такое ощущение, что это действительно легко !?Я попробовал поискать в Google, но ничего не смог найти.

Заранее спасибо, qwerty

Ответы [ 3 ]

1 голос
/ 23 мая 2011

Звучит так, как будто вы ищете обслуживание статических файлов .

По сути, вам нужно добавить папку где-нибудь в вашем проекте, чтобы сохранить носитель. Затем вам нужно отредактировать файлы urls.py и settings.py, чтобы обеспечить доступ к новому каталогу статических носителей.

urls.py

urlpatterns = patterns('',
    # Examples:
    url(r'^$', 'mysite.views.home', name='home'),

    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root':
        settings.STATIC_ROOT}),
)

settings.py

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
# Should be the location where you put your static folder.
# Should be different for testing and production environments.
STATIC_ROOT =  os.path.join(PROJECT_ROOT, 'media')

# This is assuming that your settings.py file is in path/to/project/ and your
# static files are in path/to/project/media/

Тогда в вашем шаблоне вы можете сделать это:

< img src="/static/my_image.jpg" / >

Или как хочешь. Это будет работать для javascript, css и файлов изображений.

1 голос
/ 23 мая 2011

Расширение комментария Shamanu4: вы запрашиваете, как обрабатываются статические файлы.В целях разработки вы можете использовать статический файловый сервер .

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

Если вам нужна высокая производительность, команда Django рекомендует использовать легкий, оптимизированный по скорости сервер (например, lighttpd) для обслуживания статических файлов, а другой сервер с поддержкой WSGI (например, Apache) для обслуживания Django.

В проекте Django, который у меня есть на работе, Django обслуживается из /djangoprojname/, а статические файлы обслуживаютсяот /djangoprojname/static/.На диске каталог static находится на том же уровне, что и каталог моего проекта Django.оба из которых находятся в хранилище Mercurial.В static/ у меня есть css/, js/ и img/, и в этих каталогах у меня есть один каталог на приложение, названный так же, как приложение.Это не дает запутаться.

Мой django.conf/etc/httpd/conf.d на Fedora или RHEL) выглядит примерно так:

WSGIDaemonProcess djangoprojname threads=15
WSGISocketPrefix /var/run/wsgi/wsgi

Alias /djangoprojname/static/ /var/www/djangoprojname/static/
Alias /djangoprojname/admin/media/ /usr/lib/python2.6/site-packages/django/contrib/admin/media/
WSGIScriptAlias /djangoprojname /var/www/djangoprojname/django.wsgi
WSGIProcessGroup djangoprojname

<Directory /var/www/djangoprojname>
    Order deny,allow
    Allow from all
</Directory>

<Directory /usr/lib/python2.6/site-packages/django/contrib/admin/media>
    Order deny,allow
    Allow from all
</Directory>

Для разработки я добавил это в конецurls.py:

# Only serve static media if in development (runserver) mode.
if settings.IS_DEV:
    urlpatterns += patterns('',
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve', 
            {'document_root': settings.MEDIA_ROOT, 
            'show_indexes': True}),
    )

settings.IS_DEV моего проекта установлено в моем settings.py на True, если это выполняется на сервере разработки.manage.py модифицируется для установки переменной среды, если используется runserver, и settings.py проверяет эту переменную.MEDIA_ROOT - путь к каталогу static.

0 голосов
/ 23 мая 2011

Возможно, у вас проблемы с MEDIA_ROOT и MEDIA_URL в ваших settings.py .Пожалуйста, обратитесь к http://docs.djangoproject.com/en/1.3/ref/settings/#media-root

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