2011-08-09 15 views
1

私はここで見つける私のウェブサイトのためのAjax検索スライスを使用しようとしている:http://www.web2pyslices.com/slices/take_slice/51web2pyのAjaxの検索

しかし、私はエラーを取得しておく何らかの理由:ここで

IndexError: list index out of range 

は私のバージョンです

default.py(コントローラ)

def index(): 
listings = db().select(db.listing.ALL, orderby=db.listing.first_name) 

return dict(listings=listings, livesearch=livesearch()) 

def livesearch(): 
    partialstr = request.vars.values()[0] 
    query = db.listing.title.like('%'+partialstr+'%') 
    listings = db(query).select(db.listing.title) 
    items = [] 

    for (i,listing) in enumerate(listings): 
     items.append(DIV(A(listing.title, _id="res%s"%i, _href="#", _onclick="copyToBox($('#res%s').html())"%i), _id="resultLiveSearch")) 

    return TAG[''](*items) 
:コードlayout.htmlに

livesearch.html Iは{{など}}だ(ビュー、

<input type="text" id="search" name="search" autocomplete="off" onkeyup="getData(this.value);" /><br /> 
<div id="ajaxresults"></div> 

db.py(モデル)

db.define_table(auth.settings.table_user_name, 
      Field('first_name'), 
      Field('last_name'), 
      Field('email'), 
      Field('password','password', length=512, readable=False, label='Password'), 
      Field('title'), 
      Field('photo','upload'), 
      Field('bio','text'), 
      Field('phone'), # Contact details 
      Field('website'), 
      Field('address'), 
      Field('registration_key', length=512, 
       writable=False, readable=False, default=''), 
      Field('reset_password_key', length=512, 
       writable=False, readable=False, default=''), 
      Field('registration_id', length=512, 
       writable=False, readable=False, default=''), 
      ) 

listing = db[auth.settings.table_user_name] 

すべてのヘルプは次のようになり非常に大変感謝しています。なぜなら、私は数日間私の脳を壊してしまったからです(プログラミングには全く新しいので)

ありがとう!

答えて

1
def index(): 
    listings = db().select(db.listing.ALL, orderby=db.listing.first_name) 
    return dict(listings=listings, livesearch=livesearch()) 

あなたはindex関数からlivesearchを返すようにしたくありません。あなたが参照したsliceによれば、livesearch関数は、indexページからAjax経由で呼び出される必要があります。

def livesearch(): 
    partialstr = request.vars.values()[0] 

私は上記のラインがスライスから直接取得されて知っているが、掲載変数の値にアクセスするためのより良い(より一般的な方法)は、次のとおりです。

partialstr = request.vars.partialstr if request.vars else None 

注、上記の構文request.varsがない場合、またはrequest.vars.partialstrが存在しない場合はエラーを生成しません。Noneを返します。何のリクエスト変数が存在しない時はいつでもあなたはいつもとリクエスト変数をテストすることができますので、

また、request.varsは、None次のようになります。最後に、あなたは内蔵のauto-complete widgetのweb2pyのに興味がある可能性があり

if request.vars: 

(と思うけれどもIEにはいくつかの問題があるかもしれませんが、これは修正が作業中です)。

+0

ありがとうございます!私は本当の初心者で、私はこれに何時間も執着していました。 このコードは私の問題を解決しました: "partialstr = request.vars.partialstr" – Jarrod

1

次はあなたのインデックス()のコードの場合:その後、

def index(): 
    listings = db().select(db.listing.ALL, orderby=db.listing.first_name) 
    return dict(listings=listings, livesearch=livesearch()) 

あなたはindex.htmlページやライブサーチを()をご覧あれば、呼び出されますが、この時点で、request.vars.values()空であるため、IndexErrorが発生します。

index()でlivesearch()を呼び出すのではなく、ajaxを使用してlivesearch.htmlに検索語を投稿し、web2pyはlivesearch()を呼び出し、request.vars.values()ワード。

関連する問題