2015-09-20 2 views
0

Итак, я прочитал несколько ответов на переполнение стека по этому вопросу, но ни один из них не может решить мою проблему. Я установил MEDIA_ROOT, MEDIA_URL, STATIC_ROOT и STATIC_URL, но по некоторым причинам изображения в моем media_url не отображаются на моем шаблоне, а изображения из моего static_url.Django - Изображение из MEDIA_URL не отображается на шаблоне?

Мой код ниже, а также дополнительные пояснения.

Settings.py

STATICFILES_DIRS = (
    ('/static/', 
    '/home/joe/Documents/exchange/Texchange/textchange/static',), 
    ('/media/', 
    '/home/joe/Documents/exchange/Texchange/textchange/media/',), 
) 

MEDIA_ROOT = '/home/joe/Documents/exchange/Texchange/textchange/media/' 

MEDIA_URL = '/media/' 

STATIC_ROOT = '/home/joe/Documents/exchange/Texchange/textchange/' 

STATIC_URL = '/static/' 

Models.py

class Posting(models.Model): 
    textbook = models.ForeignKey(Textbook) 
    condition = models.CharField(max_length = 200) 
    price = models.DecimalField(max_digits=5, decimal_places=2) 
    user = models.ForeignKey(User) 
    image = models.ImageField(upload_to='postingpics/%Y/%m/%d', default="../../static/textchange/nophoto.jpg") 
    post_date = models.DateTimeField('date_posted') 

    def __str__(self): 
     return str(self.textbook) 

    def was_posted_recently(self): 
     return self.post_date >= timezone.now() - datetime.timedelta(days=1) 
    was_posted_recently.admin_order_field = 'post_date' 
    was_posted_recently.boolean = True 
    was_posted_recently.short_description = 'Posted recently' 

template.html

<div class="row marketing"> 
     <div class="col-lg-6"> 
     <h3>Textbook Info</h3> 
      <p><strong>Textbook: </strong>{{ posting.textbook.textbook_name }}</p> 
      <p><strong>Condition: </strong>{{ posting.condition }}</p> 
      <p><strong>Price: </strong>{{ posting.price }}</p> 
      <p><strong>Class: </strong>{{ posting.textbook.class_name }}</p> 
      <p><strong>ISBN: </strong>{{ posting.textbook.isbn }}</p> 
      <p><strong>Author: </strong>{{ posting.textbook.author }}</p> 
     <h3>Contact Info</h3> 
      <p><strong>User: </strong>{{ posting.user.username }}</p> 
      <p>Button to contact</p> 


     </div> 

     <div class="col-lg-6"> 
     {% block content %} 
      <img src="{{ posting.image.url }}"> 
      <p>{{ posting.image.url }}</p> 
     {% endblock %} 
     </div> 
    </div> 

Так как вы можете увидеть, если я не загружать изображения для размещения он переходит в образ по умолчанию, который хранится в static/textchange. Это изображение будет отображаться на шаблоне. Если я загружу изображение, изображение не будет отображаться на шаблоне. В моем template.html у меня есть текст {{posting.image.url}} в тегах абзаца, чтобы увидеть, как выглядит URL-адрес для разных изображений.

Когда используется изображение по умолчанию в static/textchange, URL-адрес: /../static/textchange/nophoto.jpg, и изображение отображается хорошо.

Когда я пытаюсь отобразить загруженное изображение в шаблон, URL-адрес: /media/postingpics/2015/09/20/Star-Wars-Sith-Code-Wallpaper-2_dlPszgQ.jpg, и изображение не отображается. ..

Мне кажется странным, как статическое изображение имеет /../ перед статикой, но я не знаю, почему это отображается только для изображения из статической папки.

Любая помощь будет оценена по достоинству.

ответ

1

MEDIA_URL не поддерживается автоматически Django, вы должны установить это вручную. https://docs.djangoproject.com/en/1.8/howto/static-files/#serving-files-uploaded-by-a-user-during-development

Кроме того, ваши настройки для ваших статических и мультимедийных файлов нечетные:

  • Вашего MEDIA_ROOT находится внутри вашего STATIC_ROOT. Зачем?
  • Ваши STATICFILES_DIRS находятся внутри вашего STATIC_ROOT. Это не имеет никакого смысла. STATICFILES_DIRS предполагается собирать в ваш STATIC_ROOT.
  • Ваш MEDIA_ROOT настроен как каталог статических файлов в STATICFILES_DIRS. Медиа-файлы по определению не являются статическими. Удали это.

Похоже, что вы хотите что-то больше, как это:

STATICFILES_DIRS = (
    '/home/joe/Documents/exchange/Texchange/textchange/static', 
) 

MEDIA_ROOT = '/home/joe/Documents/exchange/Texchange/textchange/media/' 

MEDIA_URL = '/media/' 

STATIC_ROOT = '/home/joe/Documents/exchange/Texchange/textchange/static_root/' 

STATIC_URL = '/static/' 

Предполагая Texchange/textchange ваш корень проекта.

+0

Ну, у меня есть папка с носителями и статическая папка внутри папки моего приложения. Но если я ставил статику в конце STATIC_ROOT, мои файлы css перестали загружаться ... – Programmingjoe

+0

Я служил медиафайлам, как вы сказали, и он работает :) – Programmingjoe

+0

STATIC_ROOT на самом деле не используется в разработке, папка просто должна существовать (если Я правильно помню).Пока папка 'static' находится в STATICFILES_DIRS, как указано выше, она будет подана – mindcruzer

Смежные вопросы