Как сделать 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 %}