【问题标题】:How to verify in jinja2 or python that a google app engine datastore query has no results?如何在 jinja2 或 python 中验证谷歌应用引擎数据存储查询没有结果?
【发布时间】:2017-03-01 15:10:14
【问题描述】:

我的问题与带有 Google App Engine Datastore 和 Jinja2 的 Python 有关。

我创建了一个名为 Channel 的种类,它有两个属性:内容和用户 ID。

class Channel(ndb.Model):
  content = ndb.StringProperty()
  userid = ndb.StringProperty()

userid是从Users API检索到的userid,可以在用户登录时获取。

当用户登录时,我对我的频道类型运行以下查询以检索用户的频道:

channels = Channel.query(Channel.userid == user.user_id())

当用户已经创建了一个频道时,它可以正常工作,我可以使用以下 Jinja2 代码向用户展示频道结果:

{% for channel in channels %}
<p>userid: {{ channel.userid }} | content: {{ channel.content }}</p>
{% endfor %}

问题在于用户尚未创建频道。 Jinja2 代码没有显示任何内容,甚至没有“userid:”或“| content:”部分,我想在查询返回时向用户显示一条消息没有结果(每个用户只能创建一个频道),指导他创建一个新频道,但不确定如何在Python或Jinja2中验证。

【问题讨论】:

    标签: python-2.7 google-app-engine jinja2 google-cloud-datastore google-app-engine-python


    【解决方案1】:

    因为channels 是一个迭代器,所以在迭代它之前你无法知道那里有什么。但是,您也可以像这样获取数据:

    channels = Channel.query(Channel.userid == user.user_id()).fetch()
    

    然后你可以像这样检查列表是否为空:

    {% if channels %}
    {% for channel in channels %}
    <p>userid: {{ channel.userid }} | content: {{ channel.content }}</p>
    {% endfor %}
    {% else %}
    <p>No channels!</p>
    {% endif %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 2014-10-03
      • 2011-02-10
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多