【问题标题】:ImageField is not uploaded in DjangoImageField 未在 Django 中上传
【发布时间】:2020-06-23 15:48:50
【问题描述】:

我正在努力使用 Django 上传图像。这是我的模型,其中有图像字段:

class User(AbstractBaseUser, PermissionsMixin):
    USERNAME_FIELD = 'email'  
        ...
    photo = models.ImageField(upload_to="images/", default=None, blank=True, null=True)
  

我已阅读有关堆栈溢出的另一篇文章,我发现在settings.py 中我必须定义MEDIA_ROOTMEDIA_URL。 这是我文件中的内容:

MEDIA_URL = '/images/'
MEDIA_ROOT = '/home/anamaria/workspace/AllFest2/festivals/user/images/'

现在,我需要在 url.py 中定义我的 urlpatterns:

urlpatterns = [
   .
   .
   .

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我相信没有给出正确的路径。但我不知道为什么。我该怎么做?( 用户文件夹位于“AllFest2/festival”中,这是我项目的根目录。

 user
    ├── admin.py
    ├── api
    │   ├── __init__.py
    │   ├── permissions.py
    │   ├── __pycache__
    │   │   ├── __init__.cpython-36.pyc
    │   │   ├── permissions.cpython-36.pyc
    │   │   ├── serializers.cpython-36.pyc
    │   │   └── views.cpython-36.pyc
    │   ├── serializers.py
    │   └── views.py
    ├── images
    ├── __init__.py
    ├── manager.py
    ├── migrations
    │   ├── 0001_initial.py
    │   ├── __init__.py
    │   └── __pycache__
    │       ├── 0001_initial.cpython-36.pyc
    │       └── __init__.cpython-36.pyc
    ├── models.py
    ├── OCR.py

【问题讨论】:

    标签: python django


    【解决方案1】:

    我假设您还在设置中定义了一个基本 DIR,这会导致错误的MEDIA_ROOT

    settings.py

    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    MEDIA_URL = '/images/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'images')
    

    请注意,通常的做法是将媒体文件存储在自己的目录media 中,这将导致以下配置:

    settings.py

    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    

    urls.py

    if settings.DEBUG:
        urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
        urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    user 也是应用程序还是您的项目目录?我猜是一个应用程序,因为它不包含settings.py。不要在应用级别存储您的静态和媒体文件,这是不好的做法。

    【讨论】:

    • 好的,我在我的项目目录中创建了一个媒体目录。是的,用户是一个应用程序(在我的项目中)。我的 settings.py 在另一个目录中。我已经按照你说的做了修改。我的媒体目录是否应该与 settings.py 位于同一文件夹中?照片还没有上传:(
    【解决方案2】:

    我认为你应该在模板形式中添加 enctype

    <form action="action_url" method="post" enctype="multipart/form-data"
    

    同时让你必须按照下面在views.py中提到的做

    def upload_file(request):
        if request.method == 'POST':
            form = UploadFileForm(request.POST, request.FILES)
    

    【讨论】:

      猜你喜欢
      • 2011-04-28
      • 2013-11-06
      • 2016-03-15
      • 2016-02-10
      • 2013-01-10
      • 1970-01-01
      • 2018-11-27
      • 1970-01-01
      • 2015-02-22
      相关资源
      最近更新 更多