2011-06-30 5 views
2

Google App Engineでdjango-nonrelを使用してブログサイトを構築しています。ブログの投稿などに画像を保存して表示する方法が必要です。Django-nonrelとファイル転送アプリケーションを使用してブロブストアにアップロードされた画像を使用する

アイデアは、特定の記事などの画像をアップロードするためのアップロードアプリケーションを用意し、imd srcに絶対URLまたは相対URLを使用することです。

django-filetransfersを使用して画像をアップロードしています(http://www.allbuttonspressed.com/projects/django-filetransfers)。

質問: 1)Google App Engineとdjango-nonrelを使ってブログをホストしている人はいますか?もしそうなら、あなたはどのようにイメージを保存していますか? GAE Blobstoreを使用して、これを過剰使用していますか? 2)画像URLの場合、私はflie-transfersアプリケーションで設定したダウンロードパスを使用しています。例えば。 これは正しいですか? .png拡張子などを使用して参照するのではなく、ちょっと変わったようです。しかし、これはブロブストアから画像を参照する方法かもしれませんか?

まだDjangoとGoogle App Engineでロープを学んでいるので、どんな助けでも本当に感謝しています。

おかげ

答えて

1

は、

私は、Djangoの-nonrelでブロブストアを使用して似たような経験を持っていたことができます。

あなたの最初の質問では、Blobstoreは過労ではなく、プロジェクト全体を更新して再公開することなくイメージをアップロードできる唯一の方法だと思います。 GAEでは、サーバーのレプリケーションとセキュリティが高いため、ディレクトリに書き込むことはできません。これは、需要が増えるにつれてすべてのサーバーを自動的にスピンアップできることとのトレードオフです。ディレクトリに書き込むことを含む何かをしようとすると、App Engineはエラーになります。

私はあなた自身の2番目の質問に対するより良い解決策を探しています。自分で名前を参照できるようにしたいと思います。私は、保存時にファイル名に設定される "アップロード"モデルに余分な属性を追加することを考えています。私はそれを試していないが、それは動作するはずです。


更新:

これが働いていました。ここで

はモデルである:ここ

class UploadModel(models.Model): 
    title = models.CharField(max_length=64, blank=True) 
    file = models.FileField(upload_to='uploads/%Y/%m/%d/%H/%M/%S/') 
    filename = models.CharField(max_length=100, editable=False, null=True, blank=True) 

    def save(self, *args, **kwargs): 
     self.filename = self.file.name.rsplit('/', 1)[-1] 
     super(UploadModel, self).save(*args, **kwargs) 

は、ダウンロードハンドラです:

def download_handler(request, filename): 
    upload = get_object_or_404(UploadModel, filename=filename) 
    return serve_file(request, upload.file, save_as=True) 

URLマッピング:

url(r'^file/(?P<filename>.+)$', 'cms.views.download_handler_filename', name='cms-download_file'), 

一度これを行うあなたがして、ファイルにアクセスすることができますfilename(これはサンプルアプリケーションのスニペットです)。あなたは「PK」を見ることができるように「ファイル名」属性に置き換えた:私は自分自身に引っかかっています何

{% url cms-download_file filename=upload.filename as fallback_url %} 
<p><img src="{% firstof upload.file|public_download_url fallback_url %}"></p> 

はGAEブロブストアで動作するように「public_download_url」を取得しています。他の誰かが、公開URLを自動的に生成する適切な公開者をどのようにバックアップするのかについてコメントできたら、私はそれを高く評価します。

グラント

+0

アップロードした画像をデータストアに保存することもできます。しかし、ブロブストアを使う方が良い方法です。 –

関連する問題