22

これは私を殺している !

私は django-filebrowser を使用しており、そのアップロード機能を利用して画像を管理するギャラリー アプリを作成したいと考えています。

ユーザーがサーバー上のディレクトリを選択または作成し、そのフォルダーにファイルをアップロードしてギャラリーに表示できるギャラリーモデルがあります。ユーザーが画像をアップロードして選択したディレクトリを自動的にトロールし、フォルダー内の各画像の Image インスタンスを自動的に作成したいと考えています。

class Gallery(model.Models):
    gallerydirectory = FileBrowserField(...)
    title = ...
    description ...

class Image(model.Models):
    image_field = models.ImageField()

問題は、FileBrowser が Django とは異なる方法で画像を表現することですが、テンプレート側で他のアプリ (sorl サムネイル) を使用できるので、DJango ImageFields を使用したいと考えています。

ファイルに必要なすべてのデータ、つまりファイル名、パスなどがありますが、実際に画像を再度アップロードしないと、Django に ImageField のインスタンスを作成させることはできません。単純に入力したいだけです。

ここで、次のことを示唆する別のスレッドを見ました。

for image in filebrowser_image_objects_list:
    f = File(open('path-to-file-on-server','r'))
    i = Image()
    i.image_field('filename.png',f.read())

しかし、これは私に与えています:

SuspiciousOperation error
Attempted access to '/filename.png' denied 

これは、パスが正しく読み取られていないことを示しています。ファイル オブジェクトの属性を出力しました。正しい画像が開かれていますが、ImageField に渡されていません。

助けていただければ幸いです。

アップデート

面倒すぎるので、この作業をやめました。上記の問題は、ImageField の upload_field を '/' に設定していて、ファイルが '/something.png' に書き込まれていることに気付かなかったことです。

Image が ImageField の代わりに FileBrowserField も使用するように変更しました。

4

3 に答える 3

12

これが正しい方法であるため、これを回答済みとしてマークしています。

from django.core.files import File

image_model.image_field('path', File().read())

プログラムで画像を Django ImageField に保存する

于 2011-11-01T10:11:17.837 に答える