2013-11-15 2 views
1

Я пытаюсь создать свое первое приложение для Pyramid, и я думаю, что у меня есть базовая связь с ответами.Pyramid Response Отображается в журнале консоли, а не на странице

У меня есть список кортежей, и я хочу напечатать их на веб-странице, но вместо этого веб-страница пустая, и вместо этого в окне терминала появится список. Весь приложение:

from wsgiref.simple_server import make_server 
from pyramid.config import Configurator 
from pyramid.response import Response 
from photoCollect import photoCollect 

def printPhotos(request): 
    photoTable = photoCollect() 
    return Response(photoTable) 

if __name__ == '__main__': 
    config = Configurator() 
    config.add_route('productlist','/productlist') 
    config.add_view(printPhotos, route_name='productlist') 
    app = config.make_wsgi_app() 
    server = make_server('0.0.0.0', 8080, app) 
    server.serve_forever() 

и photoCollect определяется как:

import urllib 
import pandas as pd 

def photoCollect(): 
    # pull photo directory 
    mypath = "http://gwynniebee.com/photos" 
    mylines = urllib.urlopen(mypath).readlines() 

    # strip down web page to retain just photo names 
    photonames = [] 
    for item in mylines: 
    if ".jpg" in item: 
     k = item.replace('<',' ') 
     splitItem = k.split(" ") 
     for x in splitItem: 
     if "=" not in x and ".jpg" in x: 
      photonames.append(x) 

    photoFrame = pd.DataFrame(photonames, columns=['name']) 

    # break photo names into vendor-color-order 
    photoFrame['name2'] = photoFrame['name'].apply(lambda x: x.replace('.jpg','')) 
    s = photoFrame['name2'].apply(lambda x: pd.Series(x.split('-'))) 

    # concat vendor-color into style 
    s['style'] = s[0] + "-" + s[1] 
    s['order'] = s[2] 
    photoFrame = photoFrame.join(s) 

    # find first photo for each style and recreate photo name 
    styleMin = photoFrame.groupby('style')['order'].min() 
    photoName = pd.DataFrame(styleMin) 
    photoName = photoName.reset_index() 
    photoName['name'] = photoName['style'] + "-" + photoName['order']+".jpg" 

    # generate list to send to web 
    webList = pd.DataFrame("http://gwynniebee.com/photos/"+ photoName['name']) 
    webList['style'] = photoName['style'] 

    webList = webList.set_index('name') 
    photoList = list(webList.itertuples()) 

    print photoList 

Как сделать отображение списка на веб-страницы, а? Я смущен, почему ответ отображается в журнале, а не на странице.

+1

И что делает 'photoCollect'? –

+0

возвращает список кортежей с именами некоторых фотографий. [Это] (https://github.com/quaintm/beeProjects/blob/master/productList/photoCollect.py) является кодом для photoCollect – quaintm

+1

Правильно, и ошибка находится в методе * that *. –

ответ

4

В photoCollect() метод печатает выхода:

print photoList 

Печать записывает данные в sys.stdout, который перенаправляется в журнал при запуске сервера WSGI.

Вы хотите вернутьсяphotoList вместо:

return photoList 

Без использования return заявления, возвращаемое значение по умолчанию None и Response(None) приводит к пустой странице.

С помощью return вызывающий объект photoCollect() фактически получает этот список.

+0

Когда я изменяю 'print' на' return', я получаю следующую ошибку: «Аргумент AssertionError: write() должен быть строкой« – quaintm

+1

@quaintm: затем сначала включите этот список в строку. –

Смежные вопросы