1

我想要做的是构建一些包含 uri 页面的迷你 cms。

我的 urls.py 中的最后一条路由指向我的 views.py 中的一个函数,该函数在数据存储中检查是否存在具有与当前请求相同的 uri 的可用页面,如果有,则显示该页面。

我有一个模型:

class Page(db.Model): 
  title = db.StringProperty(required=True) 
  uri = db.TextProperty(required=True) 
  created = db.DateTimeProperty(auto_now_add=True) 
  modified = db.DateTimeProperty(auto_now=True) 
  content = db.TextProperty() 

在我看来:

def show(request): 
  page = db.GqlQuery('SELECT * FROM Page WHERE uri=:uri', uri=request.path).get() 
  if page is None: 
    return http.HttpResponseNotFound() 
  else: 
    return respond(request, 'pages_show', {'content': request.path}) 

我已经将一个带有“/work”的实体作为 uri 添加到数据存储区。

即使 request.path 恰好是“/work”,查询也不会返回匹配项。

感谢您给我的任何建议!

是的,我是一个 python 菜鸟,App Engine 非常适合最终学习这门语言。

4

2 回答 2

4

我找到了解决方案!

问题在于模型。

应用引擎数据存储不索引 TextProperty。从一开始就使用该类型是错误的,所以我将其更改为 StringProperty,它确实被索引,因此哪个数据存储允许我们在 WHERE 子句中使用。

工作模型示例:

   class Page(db.Model): 
      title = db.StringProperty(required=True) 
      // string property now
      uri = db.StringProperty(required=True) 
      created = db.DateTimeProperty(auto_now_add=True) 
      modified = db.DateTimeProperty(auto_now=True) 
      content = db.TextProperty()
于 2009-03-21T18:16:25.623 回答
2

如果使用命名关键字参数(“uri=:uri”),则必须将参数显式绑定到命名关键字。代替:

# incorrect named parameter
GqlQuery('SELECT * FROM Page WHERE uri=:uri', request.path).get()

你要

# correct named parameter
GqlQuery('SELECT * FROM Page WHERE uri=:uri', uri=request.path).get()

或者您可以只使用位置参数:

# correct positional parameter
GqlQuery('SELECT * FROM Page WHERE uri=:1', request.path).get()
于 2009-03-21T09:59:51.477 回答