Использование Django 2.1.5 + Bootstrap 4.2 и некоторых иконок из fontawesome
Здравствуйте, после долгого поиска я решил опубликовать, потому что большинство ответов связано со старыми версиями Django.Я относительно новичок в Django, и мне нравится тестировать все представления функций / классов и поля моделей.Теперь я хотел проверить, как я могу отображать изображения, связанные с моей базой данных, в моем шаблоне.Но, к сожалению, изображения не хотят отображаться, все, что я вижу, это значок заполнителя изображения.
Я создал приложение и 2 простые модели с музыкантами (с изображениями) и автомобилями.Загрузка через администратор работает, а пустой URL-адрес доступен в шаблоне через {{modelone.person_pic}}
РЕШЕННЫЕ ПРОБЛЕМЫ - см. Ниже
aquaman / models.py
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
person_pic = models.ImageField(upload_to='artist/', max_length=255, null=True, blank=True )
def __str__(self):
return "{} - {}".format(self.first_name[:25], self.last_name[:25])
class Data_Sheet(models.Model):
car = models.CharField(max_length=30)
color = models.CharField(max_length=30)
def __str__(self):
return "{} - {}".format(self.car[:25], self.color[:25])
views.py
from django.shortcuts import get_object_or_404, render, redirect
from django.utils import timezone
from django.views.generic.list import ListView
from django.views.generic import TemplateView
from .models import Person, Data_Sheet
<…some other views…>
class ArtistView4(TemplateView):
template_name = 'aquaman/artistview4.html'
def get_context_data(self, **kwargs):
context = super(ArtistView4, self).get_context_data(**kwargs)
context['modelone'] = Person.objects.all()
context['modeltwo'] = Data_Sheet.objects.all()
return context
artistview4.html
{% extends 'base.html' %}
{% load static %}
{% block custom_css %}
<link rel="stylesheet" type="text/css" href="{% static 'css/clear_styles.css' %}">
{% endblock %}
{% block content %}
{% for visual in modelone %}
<div align="center">
<h4 class="">{{ visual.first_name }}</h4>
<h4 class="">{{ visual.last_name }}</h4>
<h4 class="">{{ visual.person_pic }}</h4> <!-- to check if url is displayed -->
</div>
<img src="{{ visual.person_pic.url }}">
</div>
{% endfor %}
{% endblock %}
urls.py
from django.urls import path
from . import views
from .views import AquaListView, AquaListView2, AquaListView3, ArtistView4
app_name='aquaman'
urlpatterns = [
path('home/', views.aqua_home, name='aqua_home'),
path('aqua_listview/', AquaListView.as_view(), name='aqua_listview'),
path('aqua_listview2/', AquaListView2.as_view(), name='aqua_listview2'),
path('aqua_listview3/', AquaListView3.as_view(), name='aqua_listview3'),
path('arstistview4/', ArtistView4.as_view(), name='artistview4'),
]
мой подход
Насколько я понимаю документацию.Я должен добавить эти строки в urls.py в urlpattern, чтобы все было направлено.
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Так что мой urls.py теперь выглядит так
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
from . import views
from .views import AquaListView, AquaListView2, AquaListView3, ArtistView4
app_name='aquaman'
urlpatterns = [
path('home/', views.aqua_home, name='aqua_home'),
path('aqua_listview/', AquaListView.as_view(), name='aqua_listview'),
path('aqua_listview2/', AquaListView2.as_view(), name='aqua_listview2'),
path('aqua_listview3/', AquaListView3.as_view(), name='aqua_listview3'),
path('arstistview4/', ArtistView4.as_view(), name='artistview4'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Это то, что я добавилв моем settings.py
TEMPLATES = [
{
<…>
'django.template.context_processors.media',
<…>
},
]
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
'/var/www/static/',
]
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Пока ничего не изменилось.Django правильно показывает мне фамилию в шаблоне, но я вижу только заполнители изображений и никаких изображений.
Django Server #
Not Found: /media/artist/freddy_mercury.jpg
Not Found: /media/artist/kurt_cobain.jpg
Not Found: /media/artist/ella_fitzgerald.PNG
Not Found: /media/artist/amy_winehouse.PNG
[07/Feb/2019 18:42:49] "GET /media/artist/ella_fitzgerald.PNG HTTP/1.1" 404 2257
Когда я загружаюизображение через администратора с моего рабочего стола Django автоматически сохраняет изображения в MyProject / media / artist> , но в то же время django не может найти эти изображения?
Если перейти непосредственно к изображениям через http://127.0.0.1:8000/media/artist/kurt_cobain.jpg например, django показывает мне это:
The current path, media/artist/kurt_cobain.jpg, didn't match any of these.
Несмотря на то, что django поместил изображение через загрузку в папку BaseDir / media / artist .
Может быть, я пропустил "Обслуживание файлов в разработке", также известное как , если настройки. ОТЛАДКА: https://docs.djangoproject.com/en/2.1/ref/views/
Но когда я добавляю это, ничего не происходит.
я действительно хотел бы поблагодарить всех, у кого может быть подсказка
Проблема решена
Хорошо, я кое-что неправильно понял в Документах, может быть, это не так очевидно.
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Это следует добавить в "MainApp / urls.py" , а не в "MyOtherApps / urls.py" .Я подумал только потому, что мне нужны только изображения в определенном приложении, я должен добавить эти строки в это конкретное приложение urls.py.
Rock On & Peace