我想知道是否有一种方法可以将静态图像文件用作ImageField的默认值?
我之所以这样问是因为,如果首先编写这样的内容,是因为我无法将媒体文件夹上传到我的github存储库中,因为我将用户上传的内容存储在其中,并且默认文件始终是相同的,所以我想从静态提供默认值,但用户从媒体目录上载。
如果使用此:
image = models.ImageField(upload_to=/upload/folder/, default=/img/default.jpg, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)
它将尝试从媒体目录加载默认图像。
更新:此答案不再有效。从1.9版开始,Django /从文件路径中删除前导以将其转换为相对路径,然后追加/media/到该路径。
进行此更改是由于此票证:https : //code.djangoproject.com/ticket/25905
或者,我喜欢这个答案
首先,查看以下两条路径:
/img/default.jpg - Absolute Path (starts with slash)
img/default.jpg - Relative Path (doesn't start with slash)
Run Code Online (Sandbox Code Playgroud)
现在,如果您的默认路径是绝对路径,那么Django将不会将url转换为/media/.../。Django仅转换相对路径。
因此,如果您想提供文件static夹中的默认文件,则只需将文件的绝对路径设置为-即可/static/img/default.jpg。
额外:
您甚至可以验证这一点。Django用于urllib.parse.urljoin创建网址。尝试这个:
>>> media_url = '/media/'
>>> abs_url = '/img/default.jpg' # absolute url
>>> rel_url = 'img/default.jpg' # relative url
>>> from urllib.parse import urljoin # in Python 2: from urlparse import urljoin
>>> urljoin(media_url, abs_url) # test with absolute url
'/img/default.jpg'
>>> urljoin(media_url, rel_url) # test with relative url
'/media/img/default.jpg'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1689 次 |
| 最近记录: |