【问题标题】:Django Python AppengineDjango Python 应用引擎
【发布时间】:2010-08-27 12:32:01
【问题描述】:

我偶然发现了这个教程:

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() 到底是什么?一个元组一个列表?

visitor.ip、visitor.put()、visitors.fetch() 究竟是做什么的?

我相信:

visitor.ip 将 request.META["REMOTE_ADDR"] 保存在 db 字段中。

visitor.put() 保存它。

visitors.fetch(limit = 40) 从数据库中提取它。

我试图做的是一个将每个 IP 列在下一个下面的模板。

我相信:

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

会成功的。

但它没有。

谢谢!

【问题讨论】:

    标签: django google-app-engine


    【解决方案1】:

    Visitor 是一个类,其中的每个字段都代表数据库中的一列。 当您执行visitor = Visitor() 时,您实际上是在数据库中创建一个新行。调用visitor.put() 是将其实际提交到数据库中。 Visitors.all() 返回数据库中的所有行(它可以是列表、元组或字典),因此 visitor.fetch() 只是对其进行的操作。

    您的模板不起作用的原因是您在views.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))
    

    Context() 的参数是一个字典。左边的字符串是模板中变量的名称,右边是它对应的实际变量。在您的示例中,您可以使用{'mylist': result},在您的模板中,您可以使用{{ mylist }} 而不是{{ result }}

    您还需要确保在 settings.py 中设置一个模板目录,该模板(在上面的示例中)是该模板目录中的 polls/index.html。

    【讨论】:

    • 谢谢。它确实奏效了。我只是不明白。不过多亏了你,现在我明白了。
    【解决方案2】:

    在不了解应用引擎的情况下,我会这样说:Visitor() 返回Visitor 类的实例。接下来的步骤 (visitor.ip = request.META["REMOTE_ADDR"]) 设置在第一行中创建的实例的属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-29
      • 2011-02-03
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      相关资源
      最近更新 更多