我正在使用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):
我希望在frontpage/marketing
文件夹中创建名为media/uploads
的文件夹结构。然后,当我的用户去管理员并添加图片时,搜索图标应自动打开到正确的目录进行上传。
目前,当我点击搜索图标时,它只会转到基目录media/uploads
答案 0 :(得分:0)
我使用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.
这将在服务器上使用绝对路径构建目标文件夹名称。然后它创建文件夹,如果它不存在。有很多“讨论”是否 Cricket 使用OSError检测文件夹是否已存在。如果您在辩论的“其他”方面,请首先使用 isdir()来使用 IF 语句。
下一部分是对自定义 filebrowse 功能开始的更改:
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将为NULL)并尝试从HTML文本中抓取它。我对我的DIV选择器不满意,如果字段的顺序发生变化,它可能会开始抓错了。但它现在会做。在(希望)找到正确的文件夹名称之后,我将其作为'& dir = folder'附加到FileBrowser URL。这是利用FileBrowser在调用URL中查找“dir”值的事实。如果找到,它会在打开浏览器之前尝试CD。非常便利。不确定它的记录,我在阅读FileBrowser的源代码时找到了它。
如果FileBrowser无法将CD放入该文件夹,则会显示漂亮的粉红色错误消息。我已培训员工“修复”,通过退出文件浏览器和图像插入器对话框,按SAVE AND CONTINUE - 创建文件夹 - 然后重试。
希望这有助于其他人!
富