2016-06-21 19 views
0

本質的に、私はユーザーに「リスティング」の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を基にしてハッシュコードを作成する方法については混乱しています。そのリスティング自体を作成し、IDを知らない。

私は現在、このようなリストを作成しています:

form = request.form 
models.Listing.create(
    title = form['title'], 
    description = form['description'], 
    price = form['price'] 
) 

私は、検証のためのWTFormsでこれを使用するために、後に計画しています。

ID自体を知らなくても、リスティングの作成に一意のコードを含めることをおすすめしますか?

何か助力が大変ありがとうございます。マッチングhashidを返すために今

def getHashId(self): 
    return hashid.encode(self.id) 

、どこでもあなたがListingのインスタンスを使用しているあなたのJinja2のテンプレートでは、あなたがlisting.getHashId()を呼び出すことができます。あなたのListingモデル内

+1

? peeweeがクラスベースのモデルをサポートしている場合は、モデル自体のハッシュidに関数/プロパティを使用できます。それ以外の場合は、私が考えるジンジャーテンプレートに関数を挿入することもできます。 – syntonym

答えて

1

は、次のような機能を定義することができます問題のリストこの方法では、データベースに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 
関連する問題