基本上,我试图消除向用户显示“列表”ID的需要。我正在使用Hashids将自动创建的ID编码为唯一代码。
要显示单个商家信息,我目前一直在这样做:
@app.route('/listing/<uniqueHash>')
def listing(uniqueHash):
a = hashids.decode(uniqueHash)
listing = models.Listing.select().where( models.Listing.id == a ).get()
uniqueHash = hashids.encode(listing.id)
return render_template("test1.html", listing = listing, uniqueHash = uniqueHash)
这适用于单个商家信息。但是,如果我想显示多个这样的列表:
@app.route('/')
def index():
listings = models.Listing.select().limit(100)
return render_template("test.html", listings = listings)
然后我不能为jinja2模板的每个列表提供唯一的id(并且没有看到在jinja模板中编码/解码id的方法......是吗?)
我最终希望将唯一代码存储在数据库中,但是如果创建基于列表ID的hashid,我感到很困惑 - 当我创建该列表本身并且不知道标识。
我目前正在创建这样的商家信息:
form = request.form
models.Listing.create(
title = form['title'],
description = form['description'],
price = form['price']
)
我计划稍后将其用于WTForms进行验证。
如何在不知道id本身的情况下将唯一代码包含在列表的创建中?
非常感谢任何帮助!
答案 0 :(得分:1)
在Listing
模型中,您可以定义一个函数,例如:
def getHashId(self):
return hashid.encode(self.id)
现在,您在Jinja2模板中使用Listing
实例的任何地方,都可以调用listing.getHashId()
来返回与相关列表匹配的哈希值。这样,您就不需要将hashid存储在数据库中。
然后,您可以将listing
函数简化为以下内容:
@app.route('/listing/<uniqueHash>')
def listing(uniqueHash):
try:
listing = models.Listing.select().where(models.Listing.id == hashid.decode(uniqueHash).get())
return render_template("test1.html", listing=listing)
except:
#Listing with that uniqueHash does not exist