Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django tinymce的动态图像上载/浏览路径_Django_Django Tinymce_Django Filebrowser - Fatal编程技术网

django tinymce的动态图像上载/浏览路径

django tinymce的动态图像上载/浏览路径,django,django-tinymce,django-filebrowser,Django,Django Tinymce,Django Filebrowser,我想使用tinyMCE作为django应用程序的编辑器,但遇到了一些麻烦。我已经完成了所有设置,但似乎无法指定图像插入/上载功能的上载路径。我有两个具体的场景,这会成为一个问题: 用户提交内容的文件浏览器不应显示其他用户上载的文件。我想通过用户id将它们“囚禁”到一个特定的目录中 我需要一种方法来链接上传的文件与他们相关的对象。这样,如果对象不再存在,我可以在将来修剪这些文件,并且我可以在文件浏览器中仅显示与该对象相关的图像 django tinymce filebrowser自动将上载路径

我想使用tinyMCE作为django应用程序的编辑器,但遇到了一些麻烦。我已经完成了所有设置,但似乎无法指定图像插入/上载功能的上载路径。我有两个具体的场景,这会成为一个问题:

  • 用户提交内容的文件浏览器不应显示其他用户上载的文件。我想通过用户id将它们“囚禁”到一个特定的目录中
  • 我需要一种方法来链接上传的文件与他们相关的对象。这样,如果对象不再存在,我可以在将来修剪这些文件,并且我可以在文件浏览器中仅显示与该对象相关的图像
django tinymce filebrowser自动将上载路径设置为mce_filebrowser/%Y/%m/%d。似乎没有以任何方式更改此路径的选项

django filebrowser在settings.py中提供了设置上传目录的选项,但我还没有找到有人覆盖特定modelform实例的路径的任何记录。我发现最接近的是,但我认为那里的解决方案不适用于我的情况


有人在为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)),  
]

希望这一小小的更新能为您节省几分钟时间。

这就是我们要走的路!