python - 了解图像字段、MEDIA_ROOT 和 MEDIA URL
问题描述
在这里构建neverwalkaloner的答案,我尝试将我的图像模型属性从 CharField 迁移到 ImageField ,然后设置MEDIA ROOT
& MEDIA URL
in settings.py
。
我的理解,阅读文档:
这里(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() 调用上传吗?我究竟做错了什么?
解决方案
您无需添加max_length
in 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
推荐阅读
- xml - 覆盖网络驱动器上的 xml 文件
- html - 基于 CSS/HTML 中的内容和容器的 3 行动态 div 高度
- jib - 如何在 Jib 创建的容器中配置标准路径
- angular - Angular 9 - 单例服务
- python-3.x - 循环遍历每一列
- javascript - D3 v4 更改 kontext 相关节点的不透明度
- node.js - 我可以使用 $match 根据数据是否为空在 MongoDb 中匹配数据吗
- c# - 如何分割 IList
到 N 大小的段,而不创建副本并且没有内存分配? - apache-spark - Dataproc 忽略 Spark 配置
- c# - 是否可以在 C# 中创建异步类构造?