2014-03-19 1 views
2

Я просто глядя через учебники Python, когда я скопировал и последовал за это приложениеполучает 500 неопределенную индексную страницу для питона программы

http://www.mongodb.com/presentations/building-web-applications-mongodb-introduction

структура файла следуют:

./app 
├── views/ 
│  ├── index.tpl 
├── index.py 
└── guestbookDAO.py 

index.py

import bottle 
import pymongo 
import guestbookDAO 

#This is the default route, our index page. Here we need to read the documents from MongoDB. 
@bottle.route('/') 
def guestbook_index(): 
    mynames_list = guestbook.find_names() 
    return bottle.template('index', dict(mynames = mynames_list)) 

#We will post new entries to this route so we can insert them into MongoDB 
@bottle.route('/newguest', method='POST') 
def insert_newguest(): 
    name = bottle.request.forms.get("name") 
    email = bottle.request.forms.get("email") 
    guestbook.insert_name(name,email) 
    bottle.redirect('/') 


#This is to setup the connection 

#First, setup a connection string. My server is running on this computer so localhost is OK 
connection_string = "mongodb://localhost" 
#Next, let PyMongo know about the MongoDB connection we want to use. PyMongo will manage the connection pool 
connection = pymongo.MongoClient(connection_string) 
#Now we want to set a context to the names database we created using the mongo interactive shell 
database = connection.names 
#Finally, let out data access object class we built which acts as our data layer know about this 
guestbook = guestbookDAO.GuestbookDAO(database) 

bottle.debug(True) 
bottle.run(host='localhost', port=8082) 

guestbookDAO.py

import string 

class GuestbookDAO(object): 

#Initialize our DAO class with the database and set the MongoDB collection we want to use 
    def __init__(self, database): 
     self.db = database 
     self.mynames = database.mynames 

#This function will handle the finding of names 
    def find_names(self): 
     l = [] 
     for each_name in self.mynames.find(): 
      l.append({'name':each_name['name'], 'email':each_name['email']}) 

     return l 

#This function will handle the insertion of names 
    def insert_name(self,newname,newemail): 
     newname = {'name':newname,'email':newemail} 
     self.mynames.insert(newname) 

index.tpl

<!DOCTYPE html> 
<html> 
<head> 
    <title>Welcome to MongoDB</title> 
    <style type="text/css"> 
     body{font-family:sans-serif;color:#4f494f;} 
     form input {border-radius: 7.5px;} 
     h5{display: inline;} 
     .label{text-align: right} 
     .guestbook{float:left;padding-top:10px;} 
     .name{width:100%;float:left;padding-top: 20px} 
    </style> 
</head> 
<body> 

<div class="wrapper"> 
    <h1>Welcome To MongoDB!</h1> 
    <div class="guestbook_input"> 
     <form method="post" class="form" action="/newguest"> 
      Name: <input type="text" name="name"/> 
      Email: <input type="text" name="email"/> 
      <input type="submit" value="Add Guest"/> 
     </form> 
    </div> 

    <div class="guestbook"> 
     <h3>Guests:</h3> 
     %for name in mynames: 
      <div class="name"> 
       <h5>Name:</h5> {{name['name']}}, 
       <h5>Email:</h5> {{name['email]']}} 
      </div> 
     %end 
    </div> 
</div> 




</body> 
</html> 

Что я делаю неправильно для маршрутизации или шаблона определения, что это вызывает этот вопрос?

+0

Я ничего о бутылке не знаю, но я должен предположить, что это не проблемы в вашем шаблоне. У вас есть трассировка стека, которую вы можете опубликовать? –

ответ

2

попробовать работать в том же каталоге, например index.py, запустите , не бегите python /same/directory/index.py

эта проблема случилась со мной

2

У вас есть опечатка в шаблоне. Заменить:

<h5>Email:</h5> {{name['email]']}} 

с:

<h5>Email:</h5> {{name['email']}} 

Надежда, что помогает.

+0

спасибо, проблема, которая может быть, не влияет на маршрутизацию python, я не могу загрузить приложение через localhost: 8082 – user2167582

+0

@ user2167582 какая страница ошибки вы получаете? – alecxe

+0

Ошибка: 500 Внутренняя ошибка сервера Извините, запрошенный URL 'http: // localhost: 8082 /' вызвал ошибку: Шаблон 'index' не найден. – user2167582

3

Вы должны добавить абсолютный путь вашего местоположения шаблона в TEMPLATE_PATH:

bottle.TEMPLATE_PATH.insert(0,'/absolut/path/to/your/templates/') 

Bottle Шаблон не найден (FAQ):

Bottle searches in ./ and ./views/ for templates. In a mod_python or mod_wsgi environment, the working directory (./) depends on your Apache settings.

Меняет index.py к:

import os 
# Add these lines before `bottle.run` line. 
BASE_DIR = os.path.abspath(os.path.dirname(__file__)) 
template_path = os.path.join(BASE_DIR, 'views') 
bottle.TEMPLATE_PATH.insert(0, template_path) 
... 
... 
bottle.debug(True) 
bottle.run(host='localhost', port=8082) 

Примечание: если вы запустите из корня вашего проекта:

mongoguestbook$ ls -la 
guestbookDAO.py 
guestbookDAO.pyc 
index.py 
README.md 
views 
mongoguestbook$ python index.py 

Тогда вам не нужно, чтобы добавить выше кодов index.py, так как значение по умолчанию bottle.TEMPLATE_PATH в descibed в FAQ является:

print(bottle.TEMPLATE_PATH) 
# ['./', './views/']) 

Но если добавить их, то вы можете запустить его из корня $ python index.py или из любого места: $ python ~/workspace/so/mongoguestbook/index.py.

+0

Должен ли я добавить бутылку.TEMPLATE_PATH.insert (0, '/ путь/в/приложение/виды') выше bottle.route? – user2167582

+0

@ user2167582, Мой ответ обновлен. –

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

  • Нет связанных вопросов^_^