Я пытаюсь использовать Django 2.0. Сейчас я использую «runserver» для разработки, поэтому имейте в виду, что я еще не в продакшене. Я знаком с различиями между ними в отношении статических файлов.
У меня есть модель поста в блоге. В админке я хочу иметь возможность добавлять изображение к моей модели с помощью ImageField. Я бы хотел, чтобы он был необязательным и предоставлял изображение по умолчанию, если оно не добавлено.
Я могу загружать изображения в админке. Я не могу отобразить свое изображение в своем шаблоне. Консоль показывает, что Django пытается ПОЛУЧИТЬ мой образ, но мои конфигурации пока не работают.
Вот моя модель и соответствующее поле:
from PIL import Image
class Post(models.Model):
....
thumbnail = models.ImageField(default='/img/default.png', upload_to='img', blank=True, null=True)
....
Моя модель хорошо работает помимо ImageField. My View работает хорошо, и я не думаю, что здесь есть какие-то проблемы.
Вот мой urls.py
....
from django.conf.urls.static import static
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from . import views
urlpatterns = [
....
path('posts/', views.PostListView.as_view(), name='post_list'),
path('post/<int:pk>/', views.PostDetailView.as_view(), name='post_detail'),
path('post/random/', views.random_post, name='random_post'),
]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Я совсем не уверен, как обрабатывать статические файлы и мультимедийные файлы в моем urls.py, особенно с изменениями в Django в версии 2.0.
Вот мои соответствующие настройки.
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/'
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
....
'django.contrib.messages.context_processors.media',
....
]
},
},
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')
MEDIA_URL = '/media/'
Я также не уверен, что добавить в свой файл settings.py относительно мультимедиа. Мои статические файлы CSS работают нормально. У меня есть изображение логотипа в моих статических файлах, которое отображается в моем базовом шаблоне.
Вот мой тег шаблона для ImageField:
<img class="card-image mr-3" src="{{ post.thumbnail.url }}" alt="Generic placeholder image">
Наконец, моя папка / static и моя папка / media находятся в одном каталоге. Оба они находятся в моем каталоге приложений / blog.
Может ли кто-нибудь увидеть здесь какие-либо вопиющие ошибки или внести предложения? Моя проблема в том, что изображение по умолчанию не загружается. Изображение по умолчанию находится в правильном каталоге / media / img /. В предупреждении консоли говорится: «Не найдено: /media/img/default.png».
Заранее спасибо. Любые предложения будут полезны.
MEDIA_ROOT
? Вы уверены, что вам нуженreplace()
? Я бы изменил значение по умолчанию наdefault='img/default.png'
без ведущей косой черты. Однако я не думаю, что это настоящая проблема. - person Alasdair   schedule 16.01.2018print(MEDIA_ROOT)
в свои настройки, чтобы проверить его значение. - person Alasdair   schedule 16.01.2018