-
Помогите пожалйста разобраться с проблемой, кторую не могу решить уже несколько дней.
Я создал простое приложение на Джанго, состоящее из заголовка, аннотации, описания и изображения (модель Article). Я хочу вывести на html страницу заголовок, анонс статьи и изображения, но выодится все, кроме последнего. Что делать? Выкладываю код, подскажите, плиз, что я делаю не так?
settings.py
MEDIA_ROOT = 'C:/booksite/' MEDIA_URL = 'http://127.0.0.1:8000/media/' ADMIN_MEDIA_PREFIX = '/media/'
models.py
class Article(models.Model): title = models.CharField(max_length=200) anonce = models.TextField() body = models.TextField() date = models.DateTimeField() image = models.ImageField(upload_to='media')
views.py
def art(request): art = Article.objects.all() return render_to_response('art.html', {'art': art})
urls.py
from django.conf.urls.defaults import * from booksite.books.views import art from booksite.books import views from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', ('^$', index), (r'^article/$', art), (r'^admin/(.*)', admin.site.root), )
art.html
{% for art in art %} <h1>{{ art.title }}</h1> <h3>{{art.anonce }}</h3> <img src="{{art.image}}" width=200; />
В итоге title и anonce выводятся, а image - выводится только место под картинку с красным крестиком... -
В html-коде, который сервер отдаёт что написано в теге img?
-
art.html
{% for art in art %} <h1>{{ art.title }}</h1> <h3>{{art.anonce }}</h3> <img src="{{art.image}}" width=200; /> -
Я имею ввиду, посмотреть в браузере исходный код страницы http://127.0.0.1:8000/article
-
<img src="http://127.0.0.1:8000/media/media/5.jpg" width=200; />
-
А если изменить MEDIA_URL = 'http://127.0.0.1:8000/'
то выводится в html коде так:
<img src="http://127.0.0.1:8000/media/5.jpg" width=200; />
-
<img src="{{art.image.url}}" width=200; /> -
Я так пробовал, не помогает...
-
Сам изучая джанго, вчера напоролся на подобное поведение. Из документации стало ясно, что статичные файлы должны отдаваться средствами сервера. В режиме разработки можно включить вывод таких файлов средствами джанго. Для этого добавьте в конец корневого urls.py своего проекта следующие строки:
# В режиме разработки отдаем вывод статических файлов на совесть джанго from django.conf import settings if settings.DEBUG: urlpatterns += patterns('', (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True }), )
Естественно DEBUG должен быть установлен в True. -
Я читал в Django-документации об этом - там пишут, что такой подход можно использовать только при разработке, а на производственном сервере тогда как поступать?
-
Самое интересное, что даже это не помогло!
-
Производственный сервер вы настраиваете таким образом, чтобы папка с статичными файлами не обрабатывалась джанго. Приведенный выше код для локальной разработки вы либо убираете из проекта, либо устанавливаете DEBUG в False (для чего собственно там и делается проверка).
-
Ну посмотрите, что у вас непосредственно отдается по этом адресам:
http://127.0.0.1:8000/media/
http://127.0.0.1:8000/media/5.jpg
И напишите результат сюда. -
1. Permission denied: C:\Python25\lib\site-packages\django/contrib/admin/media\
2. Не удается найти web-страницу -
1. ADMIN_MEDIA_PREFIX установите в '/media/admin/'. Этот путь не должен вести в тоже место от корня веб-пространства, что и основная папка.
ADMIN_MEDIA_PREFIX = '/media/admin/'
2. "Не удается найти web-страницу", что это? У весь http://localhost:8000 отдается джанго. Следовательно во втором случае у вас джанго 404? Значит приведенный код не отрабатывает, разберитесь что мешает. -
Кирилл, все заработало!!!
Даже без куска кода для вывода статических файлов.
Все заработало после того, как написал ADMIN_MEDIA_PREFIX = '/media/admin/'
Спасибо Вам огромное!
-
А где можно узнать о том, как организовывать обработку статических файлов на производственном сервере? Если изображения не должны обрабатываться Django, то как тогда загружать изображения к статьям или новостям?
-
что значит "обрабатываться"..
единственное что вам нужно, так это переложить "отдачу статики" на плечи сервера (указать в конфиг. файлах)
загрузка и вывод ссылок по прежнему остается на плечах django
-
Т.е. сейчас Django путем
from django.conf import settings
if settings.DEBUG:
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True }),
)
занимается отдачей статики, а потом этот код нужно убрать и сконфигурироват правильно сервер? -
Т.е. сейчас Django занимается отдачей статики, а потом этот код нужно убрать и сконфигурироват правильно сервер?
Да, а примеры конфигураций уже смотрите непосредственно в документации выбранного сервера.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.


