2009-11-04 62 views
0

我正在爲需要圖片庫的網站開發django應用程序。由於該網站非常簡單,我選擇不使用數據庫。在長廊的一部分,我在視圖中一個循環,從圖像文件夾中讀取所有的圖像文件,並將它們發送到模板,在那裏它們被一個循環內呈現:django - dev/prod環境之間的奇怪模板循環故障

import os 
from django.shortcuts import render_to_response 

def show_pics(request): 
    """sends a list of files to the view""" 
    folder = '/static/images' 
    files = [os.path.join(folder, f) for f in os.listdir(folder) if '.jpg' in f] 
    return render_to_response('gallery.html', { 'files' : files }) 

和模板:

<div id="gallery"> 
    {% for file in files %} 
     <img src="{{ file }}" class="gallery-image" /> 
    {% endfor %} 
</div> 

這在開發模式下很好(我設置了url來爲'/ static /'下的靜態文件提供服務),但是當我上傳到我的web服務器時,圖像不會呈現。當我看呈現的HTML,這是我得到:

<div id="gallery"> </div> 

我確信靜態URL工作在Web服務器上,試圖通過靜態URL訪問一些隨機圖片 - http://mysite.com/static/images/some_image.jpg,和CSS絕對是工作(不要擔心,我將在稍後使用單獨的服務器來處理靜態文件)。我應該說生產服務器運行python2.5,而我運行2.6(都有django 1.1)。有什麼想法嗎?

回答

2

假設files在模板中爲空是安全的。您可以通過將{{ files }}放入模板並查看打印內容來確認。最有可能的是,沒有。

不過,也有一些可能出現的問題與此:

folder = '/static/images' 
files = [os.path.join(folder, f) for f in os.listdir(folder) if '.jpg' in f] 

首先,os.listdir所採取的路徑是不是從你的文檔根目錄的路徑,但是從文件系統的根。所以如果你在服務器上做ls /static/images,它會顯示什麼?

而作爲一個次要的事情,我寧願使用f.endswith('.jpg')

+0

這是有道理的,我實際上有一個如果os.path.isdir(文件夾)檢查之前的列表理解,我想它沒有超過這一點。你是對的,但它指向服務器的根,而不是我的應用程序目錄 - 也許我最終會使用數據庫...謝謝! – sa125

0

我猜測,原因是文件列表是空的。你有沒有檢查/靜態/圖像文件夾可以訪問您的django應用程序?