본질적으로 사용자에게 '목록'의 ID를 표시 할 필요를 없애려고합니다. Hashids을 사용하여 자동 생성 된 ID를 고유 코드로 인코딩합니다. 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를 제공 할 수없는 (그리고에서/디코딩 ID를 인코딩하는 방법을 볼 수 없습니다 jinja 템플릿 자체가 있습니까?)
나는 데이터베이스에 고유 한 코드를 저장하고 싶지만 목록의 ID를 기반으로 해시드를 만드는 방법에 대해 혼란스러워합니다. 그 목록 자체를 만들고 그 이드를 모른다.
나는 현재이 같은 목록을 만드는거야 : 나는 검증을위한 WTForms 이것을 사용하는 것이 나중에 계획입니다
form = request.form
models.Listing.create(
title = form['title'],
description = form['description'],
price = form['price']
)
.
ID 자체를 알지 못하고 목록을 만드는 데 고유 코드를 포함시키는 것이 가장 좋습니다. 어떻게해야합니까 ???
도움을 주시면 대단히 감사하겠습니다 !!! 일치하는 hashid을 반환하려면 지금
def getHashId(self):
return hashid.encode(self.id)
, 어디서나 Listing
의 인스턴스를 사용하여 Jinja2 템플릿, 당신은 listing.getHashId()
를 호출 할 수 있습니다 : 당신의 Listing
모델 내에서
나는 당신이 당신의 모델 peewee을 사용하는 것 같아요 :
그런 다음이 뭔가에
listing
기능을 단순화 할 수 있을까? peewee가 클래스 기반 모델을 지원하면 모델 자체에서 hashid에 대한 함수/속성을 사용할 수 있습니다. 그렇지 않으면 jinja 템플릿에 함수를 삽입 할 수도 있습니다. – syntonym