Как сделать ImageField в Django специфичным для приложений?

Я прочитал несколько ответов/статей по этим ссылкам, но все еще в замешательстве, так как все они ПОХОЖИ на то, что мне нужно:

здесь

здесь

здесь

здесь

здесь

Я хочу использовать функцию Django ImageField для загрузки изображений со страницы администратора в пространство приложений моего портфолио/блога. Моя структура папок выглядит следующим образом:

Portfolio_Blog_Website
    |---personal_portfolio_project
    |---projects_app
        |---migrations
        |---static
            |---img
        |---templates

Я хочу загружать изображения в/отображать на шаблоне из папки app > static > img.

В настоящее время у меня установлено STATIC_URL = 'static/', и я вручную перетаскиваю файлы изображений в эту папку, использую models.FilePathField(path="/img") в модели и отображаю их (в цикле for) с помощью <img src="{% static project.image %}">, что работает. Я хочу переключиться, чтобы иметь возможность загружать изображения со страницы администратора, а затем отображать их на странице приложения, как и должно быть.

Из того, что я прочитал, мы должны определить переменные MEDIA_ROOT и MEDIA_URL для использования с models.ImageField(upload_to="img/"). Проблема в том, что переменная MEDIA_ROOT должна быть АБСОЛЮТНЫМ путем к папке, который я мог бы задать как \\C:\Portfolio_Blog_Website\projects_app\static\img, однако это не обязательно то, что я хочу, потому что я нацелен на путь одного конкретного приложения, но я не хочу загружать изображения из других приложений на этот путь, так как как я могу заставить это работать? Я хочу, чтобы каждое приложение имело свои собственные папки static > img, а затем со страницы администратора я могу загружать изображения в эти конкретные папки приложений, а затем отображать их на странице каждого приложения

В дополнение к моей структуре папок, показанной выше, вот некоторые другие детали, которые должны помочь:

personal_portfolio_project > settings.py

STATIC_URL = 'static/'
MEDIA_URL = "/img/" # This doesn't work
MEDIA_ROOT = BASE_DIR # This doesn't work

projects_app > models.py

from django.db import models

# Create your models here.

# Portfolio project overview model
class Project(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    technology = models.CharField(max_length=20)
    # image = models.FilePathField(path="/img") # works as /static/img, this works with STATIC_URL
    image = models.ImageField(upload_to="img/") # This doesn't work

projects_app > project_index.html

{% extends "base.html" %}
{% load static %}
{% block page_content %}
<h1>Projects</h1>
<div class="row">
    {% for project in projects %}
        <div class="col-md-4">
            <div class="card mb-2">
                <img class="card-img-top" src="{% static project.image %}">
                <div class="card-body">
                    <h5 class="card-title">{{ project.title }}</h5>
                    <p class="card-text">{{ project.description }}</p>
                    <a href="{% url 'project_detail' project.pk %}" class="btn btn-primary">
                        Read More
                    </a>
                </div>
            </div>
        </div>
    {% endfor %}
</div>
{% endblock %}
Вернуться на верх