Уведомления

Группа в Telegram: @pythonsu

#1 Июль 20, 2009 11:11:56

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Ссылки на ресурсы в шаблонах?

Что-то туплю…
На странице не отображаются изображения, т.к. пути не находятся.
Сами изображения в папке имеются.
В шаблоне относительные пути <img src=“img/picture.png”>
Шаблоны лежат в папке djproject/templates/myapp
Приложение в папке djproject/myapp
Папку img располагал во всех возможных местах, безрезультатно:

djproject/img
djproject/myapp/img
djproject/templates/myapp/img
Какая структура папок правильная или где объявить путь к ресурсам данного приложения?



Офлайн

#2 Июль 20, 2009 12:19:02

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Ссылки на ресурсы в шаблонах?

Офлайн

#3 Июль 20, 2009 14:57:29

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Ссылки на ресурсы в шаблонах?

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 аргумент.



Отредактировано (Июль 20, 2009 15:06:53)

Офлайн

#4 Июль 20, 2009 15:44:28

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Ссылки на ресурсы в шаблонах?

os.path.join возвращает строку.

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

MEDIA_ROOT = os.path.join(TEMPLATE_DIR, 'myapp/images/')



Офлайн

#5 Июль 20, 2009 17:26:50

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Ссылки на ресурсы в шаблонах?

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”>

Страница отображается без картинок.
Что я делаю не так?



Офлайн

#6 Июль 20, 2009 17:39:02

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Ссылки на ресурсы в шаблонах?

Боюсь, что ошибка всё ещё в строке:

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

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



Офлайн

#7 Июль 20, 2009 18:38:20

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Ссылки на ресурсы в шаблонах?

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

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



Офлайн

#8 Июль 20, 2009 19:22:10

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Ссылки на ресурсы в шаблонах?

Свершилось, но странные дела творятся…

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



Отредактировано (Июль 20, 2009 19:23:05)

Офлайн

#9 Июль 20, 2009 19:32:35

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Ссылки на ресурсы в шаблонах?

Nick2009
Нет стабильности. В чем может быть дело?
Возможно в вашем коде?

Вообще такой способ раздачи статики исключительно инструмент для разработки. Во всех других случаях следует использовать веб-сервер. Попробуйте его.



Офлайн

#10 Июль 21, 2009 11:34:50

Nick2009
От:
Зарегистрирован: 2009-06-24
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Ссылки на ресурсы в шаблонах?

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

Как должны измениться предыдущие настройки в данном случае?



Отредактировано (Июль 21, 2009 11:35:42)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version