2010-08-27 75 views
0

我碰到這個教程:Django的Python的AppEngine上

http://thomas.broxrost.com/2008/04/08/django-on-google-app-engine/

太棒了!

一切正常。

我沒有完全理解下面的代碼,因爲相較於Django的似乎不同:

views.py:

def main(request): 
    visitor = Visitor() 
    visitor.ip = request.META["REMOTE_ADDR"] 
    visitor.put() 

    result = "" 
    visitors = Visitor.all() 
    visitors.order("-added_on") 

    for visitor in visitors.fetch(limit=40): 
     result += visitor.ip + u" visited on " + unicode(visitor.added_on) + u"" 

    return HttpResponse(result) 

#model.py: 

from google.appengine.ext import db 

class Visitor(db.Model): 
    ip = db.StringProperty() 
    added_on = db.DateTimeProperty(auto_now_add=True) 

到底是什麼訪問者()?一個元組列表?

visitor.ip,visitor.put(),visitors.fetch()是做什麼的?

我相信:

visitor.ip保存request.META [ 「REMOTE_ADDR」]在數據庫領域。

visitor.put()將其保存。

visitors.fetch(限制= 40)從數據庫中提取它。

我想要做的是一個tenplate,列出下一個IP下面的每個IP。

我相信:

<p><ol><Li> {{ result }} </li></ol></p> 

會做的伎倆。

但它沒有。

謝謝!

回答

0

訪客是一個類,其中的每個字段代表數據庫中的一列。 當你做visitor = Visitor()時,你基本上是在你的數據庫中創建一個新行。調用visitor.put()是實際提交到數據庫中的東西。 Visitors.all()返回數據庫中的所有行(它可以是列表,元組或字典),所以visitor.fetch()只是一個操作。

你的模板不工作的原因是因爲你在view.py中的函數沒有指定任何模板。這是從Django的教程採取:http://docs.djangoproject.com/en/1.0/intro/tutorial03/

from django.template import Context, loader 
from mysite.polls.models import Poll 
from django.http import HttpResponse 

def index(request): 
    latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5] 
    t = loader.get_template('polls/index.html') 
    c = Context({ 
     'latest_poll_list': latest_poll_list, 
    }) 
    return HttpResponse(t.render(c)) 

上下文參數()是一個字典。左邊的字符串是變量的名稱在模板中的內容,右邊是它對應的實際變量。在您的示例中,您可以使用{'mylist': result},並且在您的模板中,您可以使用{{ mylist }}而不是{{ result }}

您還需要確保在settings.py中設置模板目錄,其中模板(在上例中)是polls /該模板目錄中的index.html。

+0

謝謝。它確實有效。我只是不明白。但是,多虧了你,現在我明白了。 – MacPython 2010-08-27 13:24:49

0

我不知道應用引擎的任何內容,我會這樣說:Visitor()返回Visitor類的實例。接下來的步驟(visitor.ip = request.META["REMOTE_ADDR"])設置在第一行中創建的實例的屬性。