file download

6 views
Skip to first unread message

hasebe

unread,
Nov 15, 2009, 6:53:08 AM11/15/09
to django-ja, has...@vega.aichi-u.ac.jp
django サーバに置かれたファイルをクライアントが download できる樣に
するにはどうしたら良いでしょうか。

django を使わないのであればサーバの適切なディレクトリにあるhtmlファイルに

<a href="path/to/file">file_name</a>

と書けば良い筈です。

この類推から django を使う場合に view 関数の中で

return HttpResponse('...<a href="path/to/file">file_name</a>...')

とします。するとクライアントの Web 画面に file_name が表示されて
この部分がクリック可能になります。(ここまでは順調)

だがクリックするとURLの先頭に余分な文字列が付いてこんな具合になります。

http://host-name:port-number/path/to/file

即ち http://host-name:port-number/が余分。
ちなみに host-name はサーバの名前、port-number は起動時のポート番号(8000 等)

初等的な思い違いかミスをしているらしいのですが解決を教えて頂ければ
幸いです。

長谷部

Ian Lewis

unread,
Nov 15, 2009, 7:24:19 PM11/15/09
to djan...@googlegroups.com, has...@vega.aichi-u.ac.jp
hasabeさん、

イアンです。 django は PHPと違って /path/to/file
で叩いても、ファイルをダウンロードできませんので、ローカル開発の場合は、普段に settings.py で MEDIA_URL と
MEDIA_ROOTを設定して、ロカール開発サーバでダウンロードすることにします。

urls.py の中にこんな感じです。

if settings.DEBUG:
urlpatterns += patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT}),
)

ドキュメントをご参照してください。
http://djangoproject.jp/doc/ja/1.0/howto/static-files.html

しかし、この方法は最適じゃないので、本番環境を構築する時に、ウェブサーバでstaticファイルの設定をするほうがいいです。apacheであろうか、lighttpdであろうか、nginxであろうか、設定する方法が様々なので、ウェブサーバのドキュメントを見てください。

イアン。

2009/11/15 hasebe <has...@vega.aichi-u.ac.jp>:

--
=======================================
株式会社ビープラウド イアン・ルイス
〒150-0012
東京都渋谷区広尾1-11-2アイオス広尾ビル604
email: ianm...@beproud.jp
TEL:03-5795-2707
FAX:03-5795-2708
http://www.beproud.jp/
=======================================

Katsuya Hasebe

unread,
Nov 16, 2009, 6:12:34 AM11/16/09
to ianm...@gmail.com, djan...@googlegroups.com, has...@vega.aichi-u.ac.jp
From: Ian Lewis <ianm...@gmail.com>
Subject: Re: [django-ja:928] file download
Date: Mon, 16 Nov 2009 09:24:19 +0900
Message-ID: <320ad6020911151624y2c2...@mail.gmail.com>

長谷部です。イアンさんご返事有り難う。

> イアンです。 django は PHPと違って /path/to/file
> で叩いても、ファイルをダウンロードできませんので、
> ローカル開発の場合は、普段に settings.py で MEDIA_URL と
> MEDIA_ROOTを設定して、ロカール開発サーバでダウンロードすることにします。
>
> urls.py の中にこんな感じです。
>
> if settings.DEBUG:
> urlpatterns += patterns('',
> (r'^static/(?P<path>.*)$', 'django.views.static.serve',
> {'document_root': settings.MEDIA_ROOT}),
> )
>

私に静的ファイルという概念が殆ど無かったことがトラブルの原因でした。
上に示されたコードを試してうまく動作しましたので自分の誤りが分りました。

> ドキュメントをご参照してください。
> http://djangoproject.jp/doc/ja/1.0/howto/static-files.html

はい。思えば django は動的ファイル(という用語があるかどうか知りませんが template
を経由してその都度生成されるファイル)の取扱いの為にこそ生れて来たわけであり、従って
静的ファイルには重きをおかないの合理的な解決と理解できます。

だが、初心者には思いがけない落し穴です。

> しかし、この方法は最適じゃないので、本番環境を構築する時に、
> ウェブサーバでstaticファイルの設定をするほうがいいです。apacheであろうか、
> lighttpdであろうか、nginxであろうか、設定する方法が様々なので、
> ウェブサーバのドキュメントを見てください。

はい。これは少し先の課題として。

長谷部

追伸 イアンさんには2通の返信が行くかと思いますが御容謝。

Reply all
Reply to author
Forward
0 new messages