django tinymce的动态图像上载/浏览路径
我想使用tinyMCE作为django应用程序的编辑器,但遇到了一些麻烦。我已经完成了所有设置,但似乎无法指定图像插入/上载功能的上载路径。我有两个具体的场景,这会成为一个问题:django tinymce的动态图像上载/浏览路径,django,django-tinymce,django-filebrowser,Django,Django Tinymce,Django Filebrowser,我想使用tinyMCE作为django应用程序的编辑器,但遇到了一些麻烦。我已经完成了所有设置,但似乎无法指定图像插入/上载功能的上载路径。我有两个具体的场景,这会成为一个问题: 用户提交内容的文件浏览器不应显示其他用户上载的文件。我想通过用户id将它们“囚禁”到一个特定的目录中 我需要一种方法来链接上传的文件与他们相关的对象。这样,如果对象不再存在,我可以在将来修剪这些文件,并且我可以在文件浏览器中仅显示与该对象相关的图像 django tinymce filebrowser自动将上载路径
- 用户提交内容的文件浏览器不应显示其他用户上载的文件。我想通过用户id将它们“囚禁”到一个特定的目录中
- 我需要一种方法来链接上传的文件与他们相关的对象。这样,如果对象不再存在,我可以在将来修剪这些文件,并且我可以在文件浏览器中仅显示与该对象相关的图像
有人在为django tinymce使用其他文件浏览器吗?您是否遇到过类似的问题并找到了解决方案?如果有任何方向正确的建议,我都会非常感激。我有点不太明白这一点。我使用的是Grapelli 2.7.2和django文件浏览器3.6.1 我刚刚在django文件浏览器文件中添加了一行:sites.py: 在FileBrowserSite类的方法browse()第273行,我添加了:
self._directory_set(DIRECTORY + str(request.user) + "/")
尽管已经为每个用户创建了一个目录,但这一点很重要,您可以在每次创建用户时发出post_保存信号来创建目录。此解决方案不会将文件与对象关联,但我认为这可能是一个良好的开端,它将隔离不同用户的文件
对我来说,这目前运行得很好,我可以想象这不是最完美的方式,反馈是非常受欢迎的。我使用了类似的方法,但没有修改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的文件中,然后在我的url.py上执行了以下操作:
from .filebrowser import site
urlpatterns = [
url(r'^admin/content/file/', include(site.urls)),
]
我认为这是一种比修改源代码更为简洁的方法,并且在我的项目中发挥了巨大的作用。我对答案进行了一点扩展。一般来说,它工作得很好。谢谢但是,正如所指出的,每个用户都需要创建一个目录来使用filebrowser。建议避免使用信号,因此我将此功能添加到自定义的
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)
设置.py
FILEBROWSER_DIRECTORY = 'user_content/'
DIRECTORY = ''
url.py
from .filebrowser import site
urlpatterns = [
url(r'^admin/content/file/', include(site.urls)),
]
希望这一小小的更新能为您节省几分钟时间。这就是我们要走的路!