我想使用tinyMCE作为我的django应用程序的编辑器,但遇到了一些麻烦。我有一切设置,但似乎没有办法指定图像插入/上传功能的上传路径。我有两个特定的场景,这会成为一个问题:
django-tinymce-filebrowser自动将上传路径设置为mce_filebrowser /%Y /%m /%d。似乎没有以任何方式更改此路径的选项。
django-filebrowser有在settings.py中设置上传目录的选项,但是我无法找到任何覆盖特定模型实例的路径的人的记录。我找到的最接近的是Django filebrowser, model specific directory parameter for FileBrowserField,但我认为那里的解决方案不适用于我的情况。
是否有人使用另一个文件浏览器进行django-tinymce?你有类似的问题并找到解决方案吗?我很欣赏正确方向的任何一点。
答案 0 :(得分:2)
我使用了类似的方法,但是我没有修改django-filebrowser代码,而是在FileBrowserSite的子类中扩展了browse()方法并在那里进行了修改:
from django.core.files.storage import DefaultStorage
from filebrowser.sites import FileBrowserSite
class FileBrowserSite(FileBrowserSite):
def browse(self, request):
self.directory = self.directory + str(request.user) + '/'
return super(FileBrowserSite, self).browse(request)
storage = DefaultStorage()
site = FileBrowserSite(name='file', storage=storage)
site.directory = "content/"
我把这段代码放在一个名为filebrowser.py的文件中,然后在我的urls.py文件中,我做了:
from .filebrowser import site
urlpatterns = [
url(r'^admin/content/file/', include(site.urls)),
]
我认为这比修改源代码要简洁得多,而且在我的项目中就像魅力一样。
答案 1 :(得分:1)
我已经有点黑了这个。我在grappelli 2.7.2和django-filebrowser 3.6.1。
我刚刚在django-filebrowser文件中添加了一行:sites.py: 在FileBrowserSite类的方法browse()上,行~273,我添加了:
self._directory_set(DIRECTORY + str(request.user) + "/")
虽然已经为每个用户创建了一个目录,但是每次创建用户时都可以创建一个post_save信号来创建目录。此解决方案不会将文件与对象相关联,但我认为这对您来说可能是一个良好的开端,它会隔离不同用户的文件。
对我来说,目前工作正常,我可以想象这不是最完美的方式,反馈非常受欢迎。
答案 2 :(得分:1)
我通过Erasmo扩展了答案。通常,它的效果很好。谢谢!但是,正如OriolJ所指出的,每个用户都需要一个创建的目录才能使用文件浏览器。建议避免使用信号,因此我在自定义FileBrowserSite
中添加了此功能。
filebrowser.py
import os
from django.conf import settings
from django.core.files.storage import DefaultStorage
from filebrowser.sites import FileBrowserSite
class FileBrowserSite(FileBrowserSite):
def browse(self, request):
# get directory path from settings to avoid recursion
self.directory = settings.DIRECTORY + str(request.user) + '/'
# create a directory for a user if it does not already exist
full_path = self.storage.location + '/' + self.directory
if not os.path.exists(full_path):
os.makedirs(full_path)
return super().browse(request)
storage = DefaultStorage()
site = FileBrowserSite(name='file', storage=storage)
settings.py
FILEBROWSER_DIRECTORY = 'user_content/'
DIRECTORY = ''
urls.py
from .filebrowser import site
urlpatterns = [
url(r'^admin/content/file/', include(site.urls)),
]
希望此轻微更新将为您节省几分钟的时间。