简体   繁体   English

Appengine-如何获取实体并显示值

[英]Appengine - how to get an entity and display values

I'm having trouble with my project. 我的项目遇到了麻烦。 I have 2 models 我有2个型号

class UserPrefs(db.Model):
    user = db.UserProperty()
    name = db.StringProperty()

class Person(db.Model):
    name = db.StringProperty()
    phone = db.PhoneNumberProperty()
    userPrefs = db.ReferenceProperty(UserPrefs)

class PersonHandler(webapp.RequestHandler): 
    def get(self): 
        users.get_current_user user = () 
        if user: 
            greeting = ...... 
        else: 
            greeting = ......

        if self.request.GET.has_key ('id'): 
            id = int (self.request.get ['id']) 
            person = models.Person.get = (db.Key.from_path ('Person', id)) 

            path = os.path.join (os.path.dirname (__file__), 'templates / doStuff.html') 
            self.response.out.write (template.render (path, locals (), debug = True)) 

        def post (self): 
            if self.request.get ('Person'): 
                id = int (self.request.get ('Person')) 
                person = models.Person.get (db.Key.from_path ('Person', id)) 
            else: 
                person= models.Person = () 

            data = forms.PersonForm date = (data = self.request.POST) 
            if data.is_valid (): 
                if self.request.get ('photo'): 
                    Person.foto db.Blob = (self.request.get ('photo')) 

                person.nome self.request.get = ('name') 
                person.apelido self.request.get = ('name') 
                person.unidade self.request.get = ('unit') 

                person.put () 
                self.redirect ('/ doSomeStuff') 
            else: 
                self.redirect ('doOtherStuff')

To See the data in database i use this handler:
class SeePersonHandler (webapp.RequestHandler): 
    def get (self): 
        users.get_current_user user = () 
        if user: 
            greeting = ...... 
        else: 
            greeting = ......

        person= db.Query(models.Pocente)
        persons = person.fetch(limit = 1) 

        path = os.path.join(os.path.dirname(__file__), 'templates/SeeStuff.html')
        self.response.out.write(template.render(path, locals(), debug = True))

Question: I knows that the data is put corectly. 问题:我知道数据是核心存放的。 I used the SDK Console with this url: http://localhost:8080/_ah/admin/datastore and the entity is created correctly. 我将SDK控制台与以下URL一起使用: http:// localhost:8080 / _ah / admin / datastore,并且该实体已正确创建。 I don´t know what i am missing to retrieve the dadta already put 我不知道要检索已经放入的dadta我缺少什么

My Template: 我的模板:

{% if user %}
  {% if person%}
    <table align="center">
    <tbody>
    <tr>
      <td><input type="button" value="Criar Pessoa" onclick="redirect(3)" /></td>
    </tr>
    </tbody>
    </table>
    <table align="center">
    <tbody>
    <tr>
      <td colspan="2"><center><strong><p>O meu Curriculum Vitae</p></strong></center></td>
    </tr>
    <tr>
      <td>Nome: </td>
      <td>{{ person.name}}</td>
    </tr>
    <tr>
      <td>Apelido: </td>
      <td>{{ person.phone}}</td>
    </tr>
    <tr>
      <td></td>
      <td>
        <input type ="button" value="Editar" onclick="editarCv({{ person.key.id }})" />
      </td>
    </tr>
    </tbody>
    </table>
  {% endif %}
{% endif %}

Your code is a bit disorganised. 您的代码有点混乱。
Debugging is generally easier with better-organised code. 使用组织良好的代码,调试通常更容易。

Anyway, enough of the trash-talking. 无论如何,足够的垃圾谈话。
You're assigning the result of a datastore query to persons ... 您正在将数据存储区查询的结果分配给persons ...

persons = person.fetch(limit = 1)

...but then in your template you use person : ...但是然后在模板中使用person

<tr>
  <td>Nome: </td>
  <td>{{ person.name}}</td>
</tr>
<tr>
  <td>Apelido: </td>
  <td>{{ person.phone}}</td>
</tr>

It is difficult to tell if this is your only problem (I highly doubt it), but perhaps you can try fixing that and get back to us. 很难确定这是否是您唯一的问题(我对此表示高度怀疑),但是也许您可以尝试解决此问题并返回给我们。 Best of luck to you. 祝您好运。

Aside: instead of .fetch(limit=1) you can simply use .get() as mentioned in the documentation : 除了:除了.fetch(limit=1)您还可以使用.get()文档所述

get() implies a "limit" of 1. At most 1 result is fetched from the datastore. get()表示“限制”为1。从数据存储区最多获取1个结果。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM