2014-02-15 1 views
2

Я хотел бы использовать tinyMCE в качестве редактора для моего приложения django, но столкнулся с некоторыми проблемами. У меня есть все настройки, но, похоже, нет способа указать путь загрузки для функции вставки/выгрузки изображения. У меня есть два конкретных сценария, когда это становится проблемой:Динамический путь загрузки/просмотра изображений для django-tinymce

  • Браузер файлов для отправленного пользователем контента не должен показывать файлы, загруженные другими пользователями. Я хотел бы «посадить» их в определенный каталог по идентификатору пользователя.
  • Мне нужен способ связать загруженные файлы с объектом, к которому они относятся. Таким образом, я могу обрезать эти файлы в будущем, если объект больше не существует, и я могу показывать только изображения, связанные с этим объектом в файловом браузере.

django-tinymce-filebrowser автоматически устанавливает путь загрузки к mce_filebrowser /% Y /% m /% d. Кажется, что нет возможности каким-либо образом изменить этот путь.

django-filebrowser имеет опции для установки каталога загрузки в settings.py, но я не смог найти запись о том, что кто-то переопределяет этот путь для конкретного экземпляра modelform. Ближайший я нашел Django filebrowser, model specific directory parameter for FileBrowserField, но я думаю, что решение там не применимо к моей ситуации.

Кто-нибудь использует другой файл-браузер для django-tinymce? У вас была аналогичная проблема и найти исправление? Я был бы признателен за любые моменты в правильном направлении.

ответ

1

Я использовал такой же подход, но вместо того, чтобы модифицировать код Джанго-FileBrowser я в конечном итоге расширения метод просмотра() в подклассе FileBrowserSite и делая модификацию там:

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)), 
] 

Я думаю, что это гораздо чище, чем подход изменения исходного кода, и работает как шарм на моем проекте.

0

Я, несколько взломал это. Я нахожусь на grappelli 2.7.2 и django-filebrowser 3.6.1.

Я просто добавил строку в файл Джанго-FileBrowser: sites.py: на метод обзора() класса FileBrowserSite, линия ~ 273, я добавил:

self._directory_set(DIRECTORY + str(request.user) + "/") 

Важно, что уже существует каталог, созданный для каждого использования, вы можете сделать post_save сигнал для создания каталога каждый раз, когда пользователь будет создан. Это решение не будет связывать файлы с объектом, но я думаю, что это может быть хорошим началом для вас, и оно будет изолировать файлы разных пользователей.

Для меня это в настоящее время работает отлично, я могу себе представить, что это не самый лучший способ сделать это, обратная связь очень приветствуется.