Аватар по умолчанию не отображается в моем профиле django-project

Я попытался загрузить изображение аватара по умолчанию на странице профиля, но оно не отображается. Однако новые фотографии аватара действительно отображаются. enter image description here Объясните мне, что я сделал не так?

HTML-шаблон страницы профиля:

{% extends 'movieapp/base.html' %}
{% load static %}
{% block content %}
<h1>Данные пользователя</h1>
<form  method='post' enctype="multipart/form-data">
    {% csrf_token %}
    {% if user.photo %}
         <p><img src="{{ user.photo.url }}">
    {% else %}
         <img src="{% static 'default_image' %}">
    {% endif %}
    {% for f in form %}
    <p><label class="form-label" for="{{ f.id_for_label }}">{{ f.label }}</label>{{ f }}</p>
    <div class="form-error">{{ f.errors }}</div>
    {% endfor %}
    <p><button type="submit">Отправить</button></p>

</form>

<hr>
<p><a href="{% url 'password_change'%}">Сменить пароль</a></p>
{% endblock %}

forms.py:

class ProfileUserForm(forms.ModelForm):
    username = forms.CharField(disabled='Логин', widget=forms.TextInput(attrs={'class': 'form-input'}))
    email = forms.CharField(disabled='E-mail', widget=forms.TextInput(attrs={'class': 'form-input'}))
    this_year = datetime.date.today().year
    date_birth = forms.DateField(widget=forms.SelectDateWidget(years=tuple(range(this_year - 100, this_year - 5))))
    class Meta:
        model=get_user_model()
        fields=['photo','username','email','date_of_birth','first_name','last_name',]
        labels={
            'first_name':'Имя',
            'last_name':'Фамилия',

        }
        widgets={
            'fist_name':forms.TextInput(attrs={'class': 'form-input'}),
            'last_name':forms.TextInput(attrs={'class': 'form-input'})
        }

models.py:

from django.contrib.auth.models import AbstractUser
from django.db import models

# Create your models here.
class User(AbstractUser):
    photo=models.ImageField(upload_to='users/%Y/%m/%d/',blank=True,null=True,verbose_name='Фото')
    date_of_birth=models.DateTimeField(blank=True,null=True,verbose_name='Дата рождения')

views.py:

class ProfileUser(UpdateView):
model=get_user_model()
form_class = ProfileUserForm
template_name = 'user/profile.html'
success_url = reverse_lazy("profile_changed.html")
extra_context = {'title': 'Профиль пользователя',
                 'default_image':settings.DEFAULT_USER_IMAGE}

settings.py:

STATIC_URL = '/static/'
MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = '/users/'
DEFAULT_USER_IMAGE = MEDIA_URL + 'profile/chad.jpg'

Урлы проекта:

urlpatterns = [
path('admin/', admin.site.urls),
path('', include('movieapp.urls')),
path("__debug__/", include("debug_toolbar.urls",namespace='users')),
path("users/", include("users.urls")),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Каталог изображения аватара по умолчанию: enter image description here

В классе view вы уже передали переменную default_photo. Поэтому в шаблоне следует использовать {{ default_photo }}, а не {% static 'default_image' %}.

На самом деле я думаю, что проблема в классе представления. Вы не отправляете дополнительный контекст. Попробуйте сделать следующее:

class ProfileUser(UpdateView):
    model = get_user_model()
    form_class = ProfileUserForm
    template_name = 'user/profile.html'
    success_url = reverse_lazy("profile_changed.html")

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['default_image'] = settings.DEFAULT_USER_IMAGE
        return context
Вернуться на верх