Джанго.продолжаю получать 404 на моих изображениях, не знаю, правильно ли я установил пути - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь отобразить изображения на тестовом сайте, я уже делал это раньше

но теперь я пробовал старые и новые решения с 3 дней назад и продолжаю получать 404 на моих изображениях. Я еще не установил никакой статики, только файлы мультимедиа.

Это мои models.py

из импортных моделей django.db

''''

     class Produto (models.Model):
        nome = models.CharField(max_length=50)
        preço = models.DecimalField(max_digits=5, decimal_places=2)
        foto = models.ImageField(blank=True, upload_to='media')

def __str__(self):
    return '%s %s' % (self.nome, self.foto)

''''

my settings.py

''''

    STATIC_URL = '/static/'
    STATICFILES_DIRS = (
          os.path.join(BASE_DIR, 'static'),
    )
    STATIC_ROOT = 'JR/JR/static/produtos'
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

'''' ''''

my views.py

       from django.shortcuts import render
       from.models import Produto


       def produtolist(request):
            list = Produto.objects.all()
            return render(request, 'produtos.html', {'list': list})

'''' и рис с ошибкой и путями: ошибка

и мой шаблон

<html>
<head>
  <meta charset="utf-8">
  <title>Produtos</title>
<!--   ------------links       -->
  <link rel="stylesheet" href="{% static 'style.css' %}"

</head>

<body>
  <h1>perdida</h1>
  <img src="/media/perdida.jpg" >
   <div class="cats">
  <ul>
      {% for Produto in list %}
          <li> {{Produto.nome}} - {{Produto.preço}}</li>
          <img src="{{ Produto.foto }}" alt="{{Produto.nome}}" />
      {% endfor %}
  </ul>
</div>
</body>

1 Ответ

0 голосов
/ 20 мая 2019

Когда вы отображаете мультимедийные (загруженные) файлы в своих шаблонах, вам нужно вручную добавить MEDIA_URL перед URL-адресом файла. Вы можете сделать это с помощью тега шаблона get_media_prefix:

{% load static %}
...
<img src="{% get_media_prefix %}{{ Produto.foto }}" alt="{{ Produto.nome }}"/>

Обратите внимание, что при добавлении upload_to="media" в ImageField ваши изображения загружаются в каталог /media/media/, поскольку этот путь загрузки составляет относительно до MEDIA_ROOT.

Если вам нужно использовать его в нескольких местах, например, в цикле for, сохраните некоторые поиски на Python, выполнив:

{% load static %}
{% get_media_prefix as MEDIA_PREFIX %}
{% for Produto in list %}
    <img src="{{ MEDIA_PREFIX }}{{ Produto.foto }}"/>
{% endfor %}
...