了解图像字段,MEDIA_ROOT和MEDIA URL

时间:2018-09-01 09:24:07

标签: python django django-models

在这里建立neverwalkaloner的答案时,我尝试将图像模型属性从CharField迁移到ImageField,然后在MEDIA ROOT中设置MEDIA URLsettings.py。 / p>

我的理解,请阅读文档:

here (how Django handles files)

here (what does MEDIA URL and MEDIA ROOT mean)

here (what ImageField is and its different arguments),Django将根据ImageField和设置处理指向特定upload_path文件的绝对路径。因此,我在外壳中对其进行了测试。到目前为止,它不起作用。

产品更新尝试

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'

为什么我没有获得正确的网址路径?

是不是因为它不是技术上的test_product.save()调用上载的? 我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您不需要在max_length中添加ImageField。 如果您想要正确的网址路径,则可以设置如下代码:

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)

settings.py:

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

some.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