了解图像字段、MEDIA_ROOT和媒体 URL



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

我的理解,阅读文档:

这里(Django 如何处理文件(,

这里(媒体URL和媒体根是什么意思(,

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

更新了对产品的尝试

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(( 调用上传吗? 我做错了什么?

您无需在ImageField中添加max_length。 如果你想要一个正确的网址路径,你可以这样设置代码:

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/"

一些.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

最新更新