Django 이미지: 정적 vs 미디어
웹 페이지에 이미지를 표시하는 두 가지 방법은 다음과 같습니다.
정적 이미지
특정 이미지 집합에서 이미지를 표시하려면 정적 메서드를 사용해야 합니다.
프로젝트 폴더 내의 폴더 구조는 다음과 같아야 합니다.
ª db.sqlite3
ª manage.py
ª tree.txt
ª
+---demo
ª ª asgi.py
ª ª settings.py
ª ª urls.py
ª ª wsgi.py
ª ª __init__.py
ª ª
ª +---__pycache__
ª settings.cpython-310.pyc
ª urls.cpython-310.pyc
ª wsgi.cpython-310.pyc
ª __init__.cpython-310.pyc
ª
+---env
ª
+---myapp
ª admin.py
ª apps.py
ª models.py
ª tests.py
ª views.py
ª __init__.py
ª
+---migrations
__init__.py
ª
+---templates
ª index.html
myapp에 폴더를 만들고 이름을 '정적'으로 지정합니다.
myapp 폴더 구조는 다음과 같아야 합니다.
+---myapp
ª admin.py
ª apps.py
ª models.py
ª tests.py
ª views.py
ª __init__.py
ª
+---migrations
ª __init__.py
ª
+---static
ª
+---templates
ª index.html
이제 정적 폴더에서 '이미지' 폴더를 만들고 이미지를 업로드할 수 있습니다.
지정된 html 파일(이 경우 index.html)에서 페이지 상단에 다음을 추가합니다.
{% load static %}
파일의 이미지 태그에서 다음을 추가하여 이미지 경로를 추가합니다.
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Show Static Image</title>
</head>
<body>
<img src="{% static 'images/image.jpg' %}" alt="">
</body>
</html>
static url은 settings.py에 이미 정의되어 있으므로 static 태그는 생성된 static 폴더를 가리킵니다.
다음과 같이 이미지를 표시할 수 있습니다.
미디어를 통해 이미지 업로드
여러 이미지를 데이터베이스에 저장해야 하거나 객체 또는 사용자 특정 이미지를 표시해야 하는 경우 이 방법을 사용합니다.
이미지는 다음을 통해 데이터베이스에 업로드할 수 있습니다.
여기서는 관리자 패널을 통해 이미지를 업로드할 것입니다.
이 방법에는 Pillow(python 모듈)가 필요하므로 다음 명령을 실행합니다.
pip install Pillow
모델을 만들고 이미지 필드를 만듭니다.
from django.db import models
# Create your models here.
class MyModel(models.Model):
id = models.AutoField(primary_key=True, auto_created=True)
name = models.CharField(max_length=50)
image = models.ImageField(upload_to='images/')
이렇게 하면 설정이 완료되면 'media' 폴더와 'images' 폴더가 자동으로 생성됩니다. 변경 사항을 마이그레이션합니다.
urls.py에서 미디어의 루트를 언급합니다.
from . import views
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('', views.index, name='index'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
마지막으로 settings.py에 다음을 삽입합니다.
import os
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
이제 설정이 완료되었으므로 데이터를 삽입할 수 있습니다.
관리자 패널에 액세스하려면 다음 명령을 실행하여 수퍼유저를 만듭니다.
python manage.py createsuperuser
이제 admin.py에 다음을 추가하여 관리자 패널에 모델을 등록합니다.
from .models import *
admin.site.register(MyModel)
이제 관리자 패널로 전환하고 모델에 몇 가지 개체를 추가합니다. 다음으로, 웹 페이지에 설정된 이미지 쿼리를 전달하도록 뷰를 편집합니다.
# Create your views here.
def index(request):
images = MyModel.objects.filter(name='manasa')
return render(request, 'index.html', {'images': images})
그리고 이러한 이미지를 표시하도록 html 페이지를 편집하십시오.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Show Media Image</title>
</head>
<body>
{% for img in images %}
<img src="{{img.image.url}}" alt="" width="200px" height="150px">
{% endfor %}
</body>
</html>
이제 절차가 완료되었으므로 서버를 실행하십시오. 웹 페이지는 다음과 같아야 합니다.
Reference
이 문제에 관하여(Django 이미지: 정적 vs 미디어), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/manasask/django-images-static-vs-media-21lm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)