2010-08-27 77 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"])设置在第一行中创建的实例的属性。