我正在使用python 3.3和django 1.6,并使用django-filebrowser。
我想根据模型类中的描述自动创建任何缺少的文件夹。例如,如果模型这样说:
class Marketing(models.Model):
marketing_title = models.CharField(max_length=20)
marketing_image = FileBrowseField("Image", max_length=200, directory="/frontpage/marketing", blank=True, null=True)
def __str__(self):然后,我希望在media/uploads文件夹中创建一个名为frontpage/marketing的文件夹结构。然后当我的用户去管理并添加一个图像时,搜索图标应该会自动打开到正确的上传目录。
目前,当我单击搜索图标时,它会直接转到基本目录media/uploads
发布于 2016-09-19 23:03:35
我在一个使用Grappelli,TinyMCE V3和FileBrowser的项目中遇到了这个问题:
https://groups.google.com/d/msg/django-grappelli/kvZG9nD9OpM/bsuROsYjEQAJ
我通过在模型的SAVE函数中添加代码来解决这个问题,以便在用户保存记录时创建所需的文件夹。
import os
from django.conf import settings
class Job(models.Model):
def save(self, *args, **kwargs):
job_path = os.path.join(settings.MEDIA_ROOT, settings.FILEBROWSER_DIRECTORY, self.number)
try:
logger.debug("Trying to create folder %s", job_path)
os.makedirs(job_path)
logger.debug('--- Job Folder created! ---')
except OSError:
if not os.path.isdir(job_path):
logger.debug('--- Job Folder creation error! ---')
raise
else:
logger.debug('--- Job Folder already exists! ---')
# Call 'real' save method:
super(Job, self).save(*args, **kwargs) # Call the "real" save() method.这将使用服务器上的绝对路径构建目标文件夹名称。然后,如果文件夹不在那里,它将创建该文件夹。有很多的讨论,是否其板球使用OSError来检测文件夹是否已经存在。如果你站在辩论的“另一方”,可以先使用带有isdir()的 If 语句。
下一部分是对自定义文件浏览函数的开始部分的更改:
function CustomFileBrowser(field_name, url, type, win) {
var cmsURL = '/admin/filebrowser/browse/?pop=2';
var mypath = mypath = django.jQuery('#id_number').attr('value');
console.log("mypath using #id: " + mypath);
if (!mypath) {
mypath = django.jQuery('div.grp-readonly')[0].innerHTML;
console.log("mypath readonly: " + mypath);
}
cmsURL = cmsURL + '&type=' + type;
cmsURL = cmsURL + '&dir=' + mypath;
console.log(cmsURL);
tinyMCE.activeEditor.windowManager.open({ })
... rest of function ...
}由于我的表单为低级别用户提供了只读模式,因此保存文件夹名称的字段可能显示为“输入”字段,也可能显示为只读DIV文本。第一次尝试定义mypath适用于输入字段。IF检测是否失败(mypath将为空),并尝试从HTML文本中获取它。我对我的DIV选择器不满意,如果字段的顺序改变了,它可能会开始抓取错误的字段。但就目前而言,这已经足够了。在找到正确的文件夹名称后(希望如此),我将其作为‘& FileBrowser = folder’追加到目录URL中。这利用了FileBrowser在调用的URL中查找"dir“值的事实。如果找到,它会在打开浏览器之前尝试对其执行CD操作。非常方便。不确定它是否有文档记录,我是在阅读FileBrowser的源代码时发现的。
如果FileBrowser无法通过CD进入该文件夹,它将显示一条粉红色的错误消息。我训练员工通过退出文件浏览器和图像插入器对话框来“修复”这个问题,按下保存并继续--这会创建文件夹--然后再试一次。
希望这对其他人有帮助!
里奇。
https://stackoverflow.com/questions/22431054
复制相似问题