#python #html #django #twitter-bootstrap #bootstrap-4
#python #HTML #django #twitter-bootstrap #bootstrap-4
Вопрос:
У меня есть 2 модели и их взаимосвязь, это OneToMany. Итак, один «imovel» (португальское слово для свойства) содержит много изображений («fotos» или «imagens» на португальском языке).
Структура моего веб-приложения очень проста, и я настроил ее в настройках:
settings.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
urls.py
urlpatterns = [
path('', index, name='index'),
path('sobre_nos/', sobre_nos, name='sobre_nos'),
path('', include('imoveis.urls')),
path('admin/', admin.site.urls),
] static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Таким образом, каждое загруженное изображение переходит непосредственно в структуру «медиа», а изображения для свойств переходят к 'media/imoveis/%Y/%m/%d'
.
Я хочу показать все изображения, связанные со свойством в шаблоне, используя базовую карусель начальной загрузки:
imovel.html
<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
{% for foto in fotos_do_imovel %}
{% if foto.imagem %}
<div class="carousel-item activate">
<img class="d-block w-100" src="{{ foto.imagem }}">
</div>
{% else %}
<div class="carousel-item">
<img class="d-block w-100" src="{{ imovel.foto_principal }}">
</div>
{% endif %}
</div>
{% endfor %}
<a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Anterior</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Proxima</span>
</a>
</div>
Проблема в том, что когда я захожу на страницу imovel.html
, изображения не найдены:
imoveis/2020/10/01/pexels-photo-1571463.jpeg
imoveis/2020/10/01/pexels-photo-1643383.jpeg
[01/Oct/2020 21:20:35] "GET /imovel/3 HTTP/1.1" 200 5952
Not Found: /imovel/imoveis/2020/10/01/pexels-photo-1643383.jpeg
Not Found: /imovel/imoveis/2020/10/01/pexels-photo-1571463.jpeg
[01/Oct/2020 21:20:35] "GET /imovel/imoveis/2020/10/01/pexels-photo-1571463.jpeg HTTP/1.1" 404 3187
[01/Oct/2020 21:20:35] "GET /imovel/imoveis/2020/10/01/pexels-photo-1643383.jpeg HTTP/1.1" 404 3187
Я напечатал пути к изображениям внутри представления, чтобы проверить, все ли там в порядке, и представление отправляет правильный путь, и я не знаю, где это imovel/
добавляется к началу правильного пути, а также я не знаю, как это исправить.
(Английский не мой родной язык, поэтому я прошу прощения за несколько ошибок)
Ответ №1:
Для FileField
или ImageField
вы должны использовать .url
атрибут [Django-doc] файла:
<img class="d-block w-100" src="{{ foto.imagem.url }}">
Примечание: Django не обслуживает статические и мультимедийные файлы в рабочей среде. В процессе производства
вам нужно будет настроить веб-сервер, такой как Apache или Nginx. В документации Django
есть разделы по настройке веб-серверов.