Django Url для изображения по умолчанию приводит к 404
В настоящее время я работаю над проектом Django с двумя приложениями: проекты и пользователи. Как пользователь, так и проект могут иметь изображение; пользователь имеет изображение профиля, а проект - изображение главной страницы. Если изображение не загружено, то используется изображение по умолчанию. Вот моя проблема
Что я хочу: Изображение по умолчанию, которое будет отображаться, если не загружено ни одно изображение
Что я получаю: Неверная ссылка на изображение профиля по умолчанию, приводящая к 404 ошибке (ссылка на изображение проекта по умолчанию работает нормально)
>Что я пробовал: Читал старые темы stack overflow, Django docs и гуглил. Насколько я могу судить, это не неправильный каталог медиа, не жестко закодированный url, не ошибка форматирования jinja или неправильно написанная переменная.
Похоже, что проблемы связаны с url изображения профиля.
Сверху:
У меня есть мои медиа-урлы/директории, настроенные как для локальной разработки, так и для производства:
В settings.py:
MEDIA_URL = '/img/'
...
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/img')
В my-django-project/urls.py:
imports...
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.homepage, name='homepage'),
path('projects/', include('projects.urls')),
path('profiles/', include('users.urls')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Мой статический каталог выглядит следующим образом:
css/
js/
img/--|-featured_images/
|-profile_images/
| default.jpeg (this is the default project image)
| user_default.png (this is the default profile image)
Вот код для изображения профиля (который, похоже, не работает):
file: users/urls.py
imports...
urlpatterns = [
path('', views.profiles, name='profiles'),
path('<str:pk>', views.profile, name='profile'),
]
file: users/models.py
...
Class Profile(models.Model):
...
profile_image = models.ImageField(... default='user-default.png', upload_to='profile_images')
file: templates/users/profile.html
...
<img ... src="{{profile.profile_image.url}}"/>
Это ссылка на url ...:8000/img/profiles/user-default.png
Моя проблема заключается в этом поле profiles. Я не уверен, откуда оно берется, и не могу его удалить.
По сравнению с кодом для проекта featured_image ниже, код выше почти полностью совпадает (меняются только названия):
file: projects/urls.py
imports...
urlpatterns = [
path('', views.projects, name="projects"),
path('create-project/', views.create_project, name='create_project'),
path('<str:pk>/', views.project, name="project"),
path('update-project/<str:pk>/', views.update_project, name='update_project'),
path('delete-project/<str:pk>/', views.delete_project, name='delete_project'),
]
file: projects/models.py
...
Class Project(models.Model):
...
featured_image = models.ImageField(... default='default.jpeg', upload_to='featured_images')
file: templates/projects/project.html
...
<img ... src="{{project.featured_image.url}}"/>
Это возвращает url ...:8000/img/default.jpg (который является правильной ссылкой на изображение)
Любая помощь или предложения были бы замечательными - я действительно изо всех сил пытаюсь разобраться с этой ошибкой!