2016-01-16 31 views
0

我想從數據存儲中使用html中的鏈接刪除實體。我知道爲了做到這一點,我需要擁有實體的密鑰,以便我知道哪個實體將刪除鏈接「配對」,可以這麼說。我不能爲我的生活弄清楚如何做到這一點...需要獲取實體鍵來刪除實體

這裏是我的html文件,顯示數據庫中的所有汽車的:

{% if cars|length > 0 %} 
     {% for c in cars %} 
      <tr> 
       <td>{{ c.make }}</td> 
       <td>{{ c.model }}</td> 
       <td>{{ c.year }}</td> 
       <td> 
        {% for i in c.color %} 
         {{ i }} 
        {% endfor %} 
       </td> 
       <td>{{ c.condition }}</td> 
       <td>{{ c.date }}</td> 
       <td> 
        <a href="/view_cars/{{ c.key().id() }}">Delete Car</a> 
       </td> 
      </tr> 
      {% endfor %} 
     {% endif %} 

這裏是Python文件:

class AddCarHandler(webapp2.RequestHandler): 
    template_variables = {} 

    def get(self): 
     template = JINJA_ENVIRONMENT.get_template('index.html') 
     self.response.write(template.render(self.template_variables)) 

     action = self.request.get('action') 

     #if the user adds a car 
     if action == 'add_car': 
      c = car_database.Car() 

      c.make = self.request.get('car-make') 
      c.model = self.request.get('car-model') 
      c.year = self.request.get('car-year') 
      c.color = self.request.get_all('car-color') 
      c.condition = self.request.get('car-condition') 
      c.date = self.request.get('car-date') 

      car_key = c.put() 

class ViewCarHandler(webapp2.RequestHandler): 
    template_variables = {} 

    def get(self): 
     car = car_database.Car() 
     #ndb query 
     self.template_variables['cars'] = [{'make':x.make, 'model':x.model, 'year':x.year, 'color':x.color, 'condition':x.condition, 'date':x.date} for x in car_database.Car.query().fetch()] 
     template = JINJA_ENVIRONMENT.get_template('/view_cars.html') 
     self.response.write(template.render(self.template_variables)) 

回答

0

你可以得到一個實體(其中,比方說,通過查詢獲得)的關鍵是這樣的:

entity_key = entity.key 

注:此ONL y在之後工作該實體被保存到DB中,而不是之前(即, entity.put()至少被調用一次)。

要通過Python代碼和URL或HTML代碼之間的關鍵,從the documentation,你可以使用一個按鍵的URL字符串或基於該字符串預先計算的刪除鏈接,通過,例如,在self.template_variables['cars']

你也可以使用一個實體的鍵以獲得編碼字符串適合 爲在URL中嵌入:

url_string = sandy_key.urlsafe() 

這會產生像agVoZWxsb3IPCxIHQWNjb3VudBiZiwIM由此可以 後來被用來RECO nstruct鑰匙,找回原來的實體:

sandy_key = ndb.Key(urlsafe=url_string) 
sandy = sandy_key.get() 

你需要添加這種刪除網址的處理程序,在其中你會重建的關鍵如上引用,然後調用:

entity_key.delete()