23.06.2009 15:20

  1. Pydj

    0 ↑
    0 ↓
    Помогите пожалйста разобраться с проблемой, кторую не могу решить уже несколько дней.
    Я создал простое приложение на Джанго, состоящее из заголовка, аннотации, описания и изображения (модель 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 - выводится только место под картинку с красным крестиком...
  2. igorekk

    0 ↑
    0 ↓
    В html-коде, который сервер отдаёт что написано в теге img?
  3. Pydj

    0 ↑
    0 ↓
    art.html
    
    {% for art in art %}
        <h1>{{ art.title }}</h1>
        <h3>{{art.anonce }}</h3>
         <img src="{{art.image}}" width=200; />  
    
  4. igorekk

    0 ↑
    0 ↓
    Я имею ввиду, посмотреть в браузере исходный код страницы http://127.0.0.1:8000/article
  5. Pydj

    0 ↑
    0 ↓
    <img src="http://127.0.0.1:8000/media/media/5.jpg" width=200; />
  6. Pydj

    0 ↑
    0 ↓
    А если изменить MEDIA_URL = 'http://127.0.0.1:8000/'
    то выводится в html коде так:
    <img src="http://127.0.0.1:8000/media/5.jpg" width=200; />
  7. Анонимно

    0 ↑
    0 ↓
    <img src="{{art.image.url}}" width=200; /> 
  8. Pydj

    0 ↑
    0 ↓
    Я так пробовал, не помогает...
  9. horneds

    0 ↑
    0 ↓
    Сам изучая джанго, вчера напоролся на подобное поведение. Из документации стало ясно, что статичные файлы должны отдаваться средствами сервера. В режиме разработки можно включить вывод таких файлов средствами джанго. Для этого добавьте в конец корневого 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.
  10. Pydj

    0 ↑
    0 ↓
    Я читал в Django-документации об этом - там пишут, что такой подход можно использовать только при разработке, а на производственном сервере тогда как поступать?
  11. Pydj

    0 ↑
    0 ↓
    Самое интересное, что даже это не помогло!
  12. horneds

    0 ↑
    0 ↓
    Производственный сервер вы настраиваете таким образом, чтобы папка с статичными файлами не обрабатывалась джанго. Приведенный выше код для локальной разработки вы либо убираете из проекта, либо устанавливаете DEBUG в False (для чего собственно там и делается проверка).
  13. horneds

    0 ↑
    0 ↓
    Ну посмотрите, что у вас непосредственно отдается по этом адресам:

    http://127.0.0.1:8000/media/
    http://127.0.0.1:8000/media/5.jpg

    И напишите результат сюда.
  14. Pydj

    0 ↑
    0 ↓
    1. Permission denied: C:\Python25\lib\site-packages\django/contrib/admin/media\
    2. Не удается найти web-страницу
  15. horneds

    0 ↑
    0 ↓
    1. ADMIN_MEDIA_PREFIX установите в '/media/admin/'. Этот путь не должен вести в тоже место от корня веб-пространства, что и основная папка.
    
    ADMIN_MEDIA_PREFIX = '/media/admin/'
    


    2. "Не удается найти web-страницу", что это? У весь http://localhost:8000 отдается джанго. Следовательно во втором случае у вас джанго 404? Значит приведенный код не отрабатывает, разберитесь что мешает.
  16. Pydj

    0 ↑
    0 ↓
    Кирилл, все заработало!!!
    Даже без куска кода для вывода статических файлов.
    Все заработало после того, как написал ADMIN_MEDIA_PREFIX = '/media/admin/'
    Спасибо Вам огромное!

  17. Pydj

    0 ↑
    0 ↓
    А где можно узнать о том, как организовывать обработку статических файлов на производственном сервере? Если изображения не должны обрабатываться Django, то как тогда загружать изображения к статьям или новостям?
  18. y095

    0 ↑
    0 ↓

    что значит "обрабатываться"..

    единственное что вам нужно, так это переложить "отдачу статики" на плечи сервера (указать в конфиг. файлах)

    загрузка и вывод ссылок по прежнему остается на плечах django

  19. Pydj

    0 ↑
    0 ↓
    Т.е. сейчас 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 }),
    )

    занимается отдачей статики, а потом этот код нужно убрать и сконфигурироват правильно сервер?
  20. y095

    0 ↑
    0 ↓

    Т.е. сейчас Django занимается отдачей статики, а потом этот код нужно убрать и сконфигурироват правильно сервер?

    Да, а примеры конфигураций уже смотрите непосредственно в документации выбранного сервера.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.