首页 > 解决方案 > 了解图像字段、MEDIA_ROOT 和 MEDIA URL

问题描述

在这里构建neverwalkaloner的答案,我尝试将我的图像模型属性从 CharField 迁移到 ImageField ,然后设置MEDIA ROOT& MEDIA URLin settings.py

我的理解,阅读文档:

这里(Django如何处理文件)

这里(MEDIA URL 和 MEDIA ROOT 是什么意思)

在这里(ImageField 是什么及其不同的参数), Django 将ImageField根据upload_path& 设置处理特定文件的绝对路径。所以我在shell中测试了它。到目前为止,它不起作用。

产品更新尝试

settings.py

MEDIA_ROOT = BASE_DIR + '/project' + '/media/'
MEDIA_URL = '/media/'

models.py

from django.db import models

class Product(models.Model):
    sku = models.CharField(validators=[isalphanumeric], max_length=20, null=False, blank=False)
    image = models.ImageField(upload_to="products/" max_length=20, blank=False, null=False)

在 Python Django shell 中对其进行测试:

In  [1]: from app.models import Product
In  [2]: test_product = Product(sku='alphanumeric23', image='test_product.png')
In  [3]: test_product.image.path
Out [3]: 'C:\\Users\\user\\path\\to\\project\\project\\media\\test_product.png'

但我的预期输出应该是:

'C:\\Users\\user\\path\\to\\project\\project\\media\\product\\test_product.png'

为什么我没有得到正确的 url 路径?

是因为它在技术上没有通过 test_product.save() 调用上传吗?我究竟做错了什么?

标签: pythondjangodjango-models

解决方案


您无需添加max_lengthin ImageField。如果你想要一个正确的 url 路径,你可以设置如下代码:

网址.py:

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

设置.py:

MEDIA_URL = "/media/"
MEDIA_ROOT = "/path/to/projectdirectory/media/"

一些.html:

{{product.image.url}}

输出网址: 如果您想要这样的输出,https://hostname/media/products/image.jpg 您也可以添加:upload_to= 'products/%Y/%m/%d'

https://hostname/media/products/year/month/date/image.jpg

推荐阅读