Найти - Пользователи
Полная версия: Ссылки на ресурсы в шаблонах?
Начало » Django » Ссылки на ресурсы в шаблонах?
1 2
Nick2009
Что-то туплю…
На странице не отображаются изображения, т.к. пути не находятся.
Сами изображения в папке имеются.
В шаблоне относительные пути <img src=“img/picture.png”>
Шаблоны лежат в папке djproject/templates/myapp
Приложение в папке djproject/myapp
Папку img располагал во всех возможных местах, безрезультатно:
djproject/img
djproject/myapp/img
djproject/templates/myapp/img
Какая структура папок правильная или где объявить путь к ресурсам данного приложения?
Александр Кошелев
http://docs.djangoproject.com/en/dev/howto/static-files/#howto-static-files
Nick2009
Daevaorn
http://docs.djangoproject.com/en/dev/howto/static-files/#howto-static-files
Всё, что предписано документацией, сделал.

Не получается указать путь в settings.py

Вот такой код вызывает ошибку:
import os.path
TEMPLATE_DIR =os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/')
TEMPLATE_DIRS = (
TEMPLATE_DIR,
)
MEDIA_ROOT = TEMPLATE_DIR.join('myapp/images/') # вот на этой строке
STATIC_DOC_ROOT = MEDIA_ROOT
MEDIA_URL = '/images/'
Никак не могу заставить TEMPLATE_DIR быть строкой… При повторном вызове снова вызывается функция os.path.dirname и т.д, что приводит к контекстной ошибке: функция join должна иметь 1 аргумент.
Александр Кошелев
os.path.join возвращает строку.

Ошибка у вас в том, что join у строки немного другую функцию выполняет.

MEDIA_ROOT = os.path.join(TEMPLATE_DIR, 'myapp/images/')
Nick2009
Daevaorn
os.path.join возвращает строку.

Ошибка у вас в том, что join у строки немного другую функцию выполняет.

MEDIA_ROOT = os.path.join(TEMPLATE_DIR, 'myapp/images/')
Исправил. Всё равно не работает.

С учетом Вашей поправки, попробовал по другому:

Переместил шаблоны внутрь приложения.
djproject/myapp/templates

Разместил там же статику
djproject/myapp/templates/images

и собственно наблоны
djproject/myapp/templates/*.html

Изменил загрузчик по умолчанию и путь к статике сделал относительно приложения
TEMPLATE_LOADERS = (
# 'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source',
# 'django.template.loaders.eggs.load_template_source',
)

import os.path
TEMPLATE_DIR =''.join(os.path.join(os.path.dirname(__file__), 'myapp/templates').replace('\\','/'))
TEMPLATE_DIRS = (
TEMPLATE_DIR,
)
MEDIA_ROOT = os.path.join(TEMPLATE_DIR, '/images/')
STATIC_DOC_ROOT = MEDIA_ROOT
MEDIA_URL = '/images/'
скорректировал url
urlpatterns = patterns('',
(r'^images/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_DOC_ROOT}),
(r'^$' , 'myapp.views.index'),
...
...
В шаблоне <img src=“/images/picture.png”>

Страница отображается без картинок.
Что я делаю не так?
Александр Кошелев
Боюсь, что ошибка всё ещё в строке:
MEDIA_ROOT = os.path.join(TEMPLATE_DIR, '/images/')
Согласно документации, os.path.join, в случае получения абсолютного пути в одном из чанков (у вас “/images/”), отбрасывает всё что идет перед ним.

Уберите первый слеш из “/images/” и скорей всего заработает.
Nick2009
Daevaorn
Уберите первый слеш из “/images/” и скорей всего заработает.
Свершилось!

Слеш я туда поставил, т.к. полагал, что раз путь к шаблонам заканчивается без слеша, то при объединении строк разделительный слеш нужен. Однако, ошибся.
Nick2009
Свершилось, но странные дела творятся…

Нажимаю подряд несколько раз обновление страницы в тулбоксе браузера и после каждого обновления внешний вид страницы меняется. Изображения вразнобой то появляются, то пропадают, то опять появляются. Нет стабильности. В чем может быть дело?
Александр Кошелев
Nick2009
Нет стабильности. В чем может быть дело?
Возможно в вашем коде?

Вообще такой способ раздачи статики исключительно инструмент для разработки. Во всех других случаях следует использовать веб-сервер. Попробуйте его.
Nick2009
Кроме папки изображений /img/ у меня еще есть другая статика /css/ и /flash/. Я поместил их в общую папку
/s/img/
/s/css/
/s/flash/
,возможно будут ещё,
и теперь не могу настроить статику на папку /s/, чтобы на страницах можно было ссылаться /s/…/file.ext.
Разные регулярки пробовал, не получается.

Как должны измениться предыдущие настройки в данном случае?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB