Добрый день. Никак не могу заставить джангу отображать аватары пользователей, которые находятся в MEDIA_ROOT. Находил похожий вопрос, но ответ на него мне не помог.
models.py
class User(AbstractBaseUser, PermissionsMixin):
...
avatar = models.ImageField(upload_to=get_avatar_path, blank=True, null=True)
...
критичные настройки в settings.py
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
views.py
class UserDetailView(DetailView):
model = User
context_object_name = 'user_obj'
def get_context_data(self, **kwargs):
context = super(UserDetailView, self).get_context_data()
context.update({'data': self.get_info()})
return context
корневой urls.py
from django.conf.urls import url, include
from django.conf.urls.static import static
from django.contrib import admin
from django.conf import settings
from django.views.generic import RedirectView
from django.views.static import serve
from django.contrib.staticfiles import views
from posts import views as post_views
from authentication import views as auth_views
urlpatterns = [
url(r'^admin/', admin.site.urls, name='admin'),
url(r'^posts/', include('posts.urls', namespace='posts')),
url(r'^$', RedirectView.as_view(url='posts/', permanent=True)),
url(r'accounts/', include('django.contrib.auth.urls')),
url(r'^auth/', include('authentication.urls', namespace='authentication')),
url(r'^users/', include('core.urls', namespace='core')),
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# urlpatterns += staticfiles_urlpatterns()
#
# if settings.DEBUG:
# urlpatterns += [
# url(r'^media/(?P<path>.*)$', serve, {
# 'document_root': settings.MEDIA_ROOT,
# }),
# ]
Закоментированные варианты я также пробовал, но безрезультатно.
Кусок темплейта
{% extends 'base.html' %}
{% block title %} User: {{ user_obj.username }} {% endblock title %}
{% block content %}
{% load static %}
<div class="container">
<div class="content">
<div class="personal-data">
<div class="row user-head">
<div class="left-col">
<img src="{{ user_obj.avatar.url }}" width="96px" height="96px">
</div>
Ошибка выглядит вот так
Page not found (404)
Request Method: GET
Request URL:
127.0.0.1:8000/media/home/username/djcode/blog/blo...
Raised by: django.views.static.serve
Как быть? :)
UPDATE:
Как верно заметил devalone, путь в upload_to к файлу не должен быть абсолютным.
Исправил и все заработало.
Всем спасибо