Django 이미지: 정적 vs 미디어

Django를 사용할 때 웹 사이트에 이미지를 표시하는 방법은 주로 2가지가 있습니다. 그러면 어떤 방법을 사용해야 할까요? 요구 사항에 따라 다르며 각 방법을 사용하는 방법과 시기에 대한 자세한 이해를 제공할 것입니다.

웹 페이지에 이미지를 표시하는 두 가지 방법은 다음과 같습니다.
  • 정적 이미지
  • 미디어를 통해 업로드



  • 정적 이미지



    특정 이미지 집합에서 이미지를 표시하려면 정적 메서드를 사용해야 합니다.

    프로젝트 폴더 내의 폴더 구조는 다음과 같아야 합니다.

    ª   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>
    


    이제 절차가 완료되었으므로 서버를 실행하십시오. 웹 페이지는 다음과 같아야 합니다.

    좋은 웹페이지 즐겨찾기