AskHoamon你好,我很想加入貴論壇,並有問題請教

2 views
Skip to first unread message

Derek Dai

unread,
Mar 30, 2008, 11:33:36 PM3/30/08
to AskHoamon
Hi AskHoamon,

我叫Derek,因緣際會下在msn認識了毛毛兄。雖然研究所就讀商科,但對學習Django有極大熱忱。有些問題在看了官網電子書後仍有
不解處,祈求能給予指教,銘感五內啊....

情況:
我是用apache + mod_py,因浮動ip緣故,使用no-ip讓我在那裡申請的domain name可每次去自動
tarck ip。我在app qq -> model.py簡單設了 pfield =
models.ImageField(upload_to=
"ppp"),也完成了manage.py syncdb程序。

問題:
我的media_root 、 media_url要如何設定?
例如我在qq 裡設ppp 的folder,那麼是否media_root就是它的絕對路徑?例:
"C:/Python25/Lib/site-packages/django/project/qq/ppp"?
media_url是否設定為:"http://www.mydomain.name/media/"?(我的目前作業都在本
地端進行)

若以上設定成功,那麼我在template處,該下什麼tag才能讓圖從資料庫中取出呢?

以上問題著實困擾我一段時間目前一直無法解決,誠心求教,感激萬分。

Derek

阿蒙

unread,
Mar 31, 2008, 8:18:57 PM3/31/08
to AskHoamon
首先建議你在本機使用時,請使用 ./manage.py runserver 的方式來執行 django 程式,這樣你所修改的程式可以即時在
http://127.0.0.1:8000/ 中觀看。等你覺得修得差不多的時候,再重啟 apache ,並在 http://127.0.0.1/
中確認,待沒有問題後,再從 http://www.mydomain.name/ 確認,一層一層作檢查會比較能夠發現問題的所在。

關於上傳檔案的設定,應該是這麼作的:

在 settings.py 中設定 MEDIA_ROOT = 'C:/Python25/Lib/site-packages/django/
project/qq'

然後在 qq/models.py 中設定
class SomeClass(models.Model):
----pfield =models.ImageField(upload_to="ppp")

這樣你的上傳檔案會存放在 C:/Python25/Lib/site-packages/django/project/qq/ppp

但你也可以這麼作:

在 settings.py 中設定 MEDIA_ROOT = 'C:/Python25/Lib/site-packages/django/
project'

然後在 qq/models.py 中設定
class SomeClass(models.Model):
----pfield =models.ImageField(upload_to="qq/ppp")

這樣一樣會把上傳檔案放在 C:/Python25/Lib/site-packages/django/project/qq/ppp

但這麼作的好處是,如果你還有個 xx app 的話,你也可以設定在 .../project/xx/hhh 中。


而要瀏覽所上傳的檔案,可分兩個方向,一種是把你的上傳路徑變成 media 的資料夾,一種是透過 views.py 作處理,確定 OK 後,才丟
給使用者。

media:

請觀看我的 blog 文章: http://hoamon.blogspot.com/2007/05/django.html

views.py:

首先到你的 urls.py 設定下載的 url ,如: (r'^downfile/(?P<file_id>[0-9]+)/$',
'downfile')

然後撰寫 downfile view function

def downfile(R, file_id):
----""" 先判斷檔案存不存在,存在才給使用者瀏覽。
----接下來,去判斷副檔名,不能判斷者以'text'代替,最後讀進整個檔,並直接 output 出去。
----"""
----try:
--------upfile = UploadFile.objects.get(id=file_id)
----except:
--------return HttpResponseRedirect('/fileboard/error_msg/
no_download/')

----filename = upfile.get_file_filename()
----basename = os.path.basename(filename)
----f = open(filename)
----try:
--------ext = os.path.splitext(filename)[1][1:]
----except:
--------ext = 'text'
----
----response = HttpResponse(mimetype='application/%s' % ext)
----response['Content-Disposition'] = 'attachment; filename=
%s'.encode('big5') % upfile.name
----response.write(f.read())
----return response

第二種方法的好處是,若要下載的檔案不存在,你可以秀警告訊息或是其他你想得到的反應,但缺點是會比 media 設定的方式還要浪費 cpu 。

阿蒙

unread,
Apr 3, 2008, 9:33:39 AM4/3/08
to Derek Dai, askh...@googlegroups.com
你應該是將回信寄到 askh...@googlegroups.com 這個信箱,這樣你的留言才可能留在 AskHoamon
的版上,還會有其他人受益於你的文章。

另外,你也可以將

if request.method == 'POST':

改成

if request.POST:

這樣還可以少打幾個字。

2008/4/2 Derek Dai <derek...@gmail.com>:
> 非常由衷感謝阿蒙大願意這麼詳細解答,目前試一切OK了,再次萬分感激:)
> 敝人亦提供在網上看到的Django上傳圖片程式:http://www.zoia.org/blog/2007/07/29/django-
> file-upload/
> 給有興趣朋友參考,不過該位作者其中有一行
> if request['method'] == 'POST':
>
> 在我自己這裡必須把它改成
> if request.method == 'POST':
>
> 才可以跑。以上
> 歡迎有需要的朋友一起教學相長:)
>
> AskHoamon 真是個好地方


>
>
> On 4月1日, 上午8時18分, 阿蒙 <hoa...@gmail.com> wrote:
> > 首先建議你在本機使用時,請使用 ./manage.py runserver 的方式來執行 django 程式,這樣你所修改的程式可以即時在http://127.0.0.1:8000/中觀看。等你覺得修得差不多的時候,再重啟 apache ,並在http://127.0.0.1/

> > 中確認,待沒有問題後,再從http://www.mydomain.name/確認,一層一層作檢查會比較能夠發現問題的所在。

--
hoamon's PGP Key ssvn.hoamon.info/OpenTrunk/hoamon.pgp.asc
ID: 0x244E7AEB
Fingerprint: 39D5 9857 E340 2EB5 F3AD C7E8 98D0 4DDD 244E 7AEB

Reply all
Reply to author
Forward
0 new messages