首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-filebrowser -如何自动为图像创建缺失的文件夹?

django-filebrowser -如何自动为图像创建缺失的文件夹?
EN

Stack Overflow用户
提问于 2014-03-16 07:28:20
回答 1查看 630关注 0票数 0

我正在使用python 3.3和django 1.6,并使用django-filebrowser。

我想根据模型类中的描述自动创建任何缺少的文件夹。例如,如果模型这样说:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2016-09-19 23:03:35

我在一个使用Grappelli,TinyMCE V3和FileBrowser的项目中遇到了这个问题:

https://groups.google.com/d/msg/django-grappelli/kvZG9nD9OpM/bsuROsYjEQAJ

我通过在模型的SAVE函数中添加代码来解决这个问题,以便在用户保存记录时创建所需的文件夹。

代码语言:javascript
复制
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 语句。

下一部分是对自定义文件浏览函数的开始部分的更改:

代码语言:javascript
复制
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进入该文件夹,它将显示一条粉红色的错误消息。我训练员工通过退出文件浏览器和图像插入器对话框来“修复”这个问题,按下保存并继续--这会创建文件夹--然后再试一次。

希望这对其他人有帮助!

里奇。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22431054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档