2012-06-14 41 views
0

我使用Appengine 1.6.5,從jinja2模板訪問NDB模型類屬性我得到了None,而是獲得了訪問同一個Propery的正確結果循環。 解釋我張貼一些代碼有一種方法可以從jinja2模板訪問ndb模型類屬性

---型號的問題---

class Vehicles(ndb.Model): 
    registration = ndb.StringProperty() 
    brand = ndb.StringProperty() 
    model = ndb.StringProperty() 
    cost = ndb.FloatProperty() 
    km_cost = ndb.FloatProperty() 
    viacard = ndb.StringProperty() 
    telepass = ndb.StringProperty() 

class Employees(ndb.Model): 
    user_id = ndb.StringProperty() 
    name = ndb.StringProperty() 
    surname = ndb.StringProperty() 
    email = ndb.StringProperty() 
    job = ndb.StringProperty() 
    credit_card = ndb.StringProperty() 
    cc_expiry_date = ndb.StringProperty() 
    vehicle = ndb.KeyProperty(kind=Vehicles) 
    last_login = ndb.DateTimeProperty(auto_now=True) 
    last_activity = ndb.DateTimeProperty(auto_now=True) 

    @property 
    def vehicle_registration(self): 
     return Key(self.vehicle.kind(),int(self.vehicle.id())).get().registration 

---處理程序--- 這我只是一個處理程序

class BaseHandler(webapp2.RequestHandler): 

    @webapp2.cached_property 
    def jinja2(self): 
     return jinja2.get_jinja2(app=self.app) 

    def render_template(self, filename, **kwargs): 
     self.response.write(self.jinja2.render_template(filename, **kwargs)) 

class EmployeesHandler(BaseHandler): 
    @login_required 
    def get(self,**kwargs): 
     user = users.get_current_user() 
     company = models.Company.query().fetch(1) 
     employees = models.Employees.query().fetch() 
     vehicles = models.Vehicles.query().fetch() 

     params = { 
      "nickname" : user.nickname(), 
      "company" : company, 
      "employees" : employees, 
      "vehicles" : vehicles 
      } 
     return self.render_template('employee.html', **params) 

的一部分---模板--- 這是templte的一部分

<table class="table table-striped table-bordered table-condensed"> 
    <thead> 
    <tr> 
     <th>Nome</th> 
     <th>Cognome</th> 
     <th>Email</th> 
     <th>Ruolo</th> 
     <th>Carta di credito</th> 
     <th>Scadenza</th> 
     <th>Auto</th> 
     <th>Ultimo accesso</th> 
     <th>Ultimo movimento</th> 
    </tr> 
    </thead> 
    <tbody> 
    {% for emp in employees %} 
    <tr> 
     <td>{{ emp.name }}</td> 
     <td>{{ emp.surname }}</td> 
     <td>{{ emp.email }}</td> 
     <td>{{ emp.job }}</td> 
     <td>{{ emp.credit_card }}</td> 
     <td>{{ emp.cc_expiry_date }}</td> 
     <td>({{ emp.vehicle.vehicle_registration }})</td> 
     <td>{{ emp.last_login }}</td> 
     <td>{{ emp.last_activity }}</td> 
    </tr> 
    {% endfor %} 
    </tbody> 
</table> 

任何人都可以告訴我正確的方式來獲得僱主的汽車註冊號碼? 感謝的提前

問候, 羅伯託

回答

0

嘗試:emp.vehicle.get.vehicle_registration

但是,你正在運行到n+1 problem,你真的應該考慮prefetching the vehicle reference.

+0

我tryed emp.vehicle.get.vehicle_registration ,但它不起作用 –

+0

@ rp_189仍然無法獲得None ?,請嘗試僅打印emp.vehicle –

+0

正如Shay所說,如果emp.vehicle不是None,emp.vehicle.get.vehicle_registration應該可以工作。儘管您的代碼和您的模板之間存在不一致, vehicle_registration在Employee上,所以你應該試着emp.vehicle_registration(如果你的代碼沒有改變)。但是我不明白你爲什麼使用Key(self.vehicle.kind(),int(self.vehicle.id())).get()。你應該只能使用self.vehicle.get()。註冊。 –

相關問題