2017-08-03 2 views
2

私はwww.example.com/search?param1=abc&param2=xyz&param3=のようなURLを持っていますが、現時点で私が行っていることは、このようなものです。djangoで空のgetパラメータをスキップする方法

if ((request.GET.get('param1')) or (request.GET.get('param2')) or (request.GET.get('param3'))): 
    if request.GET.get('param1'): 
     value1 = request.GET.get('param1') 
    if request.GET.get('title'): 
     value2 = request.GET.get('param2') 
    if request.GET.get('location'): 
     value3 = request.GET.get('param3') 

api_url = `www.api-end-point.com?p1=value1&p2=value2&p3=value3&format=json` 

でも、皆さんはparam3が空で、apiを押すと空のパラメータをスキップする必要があることがわかります。

私の質問は、どのようにdjangoのGETリクエストのurlからすべての設定パラメータを取得できるのですか?

+0

を何も渡されない場合は、デフォルトのパラメータを使用してみましたが? – Gahan

+0

@Gahan私はそれが私の最初のプロジェクトであり、私はデフォルトのパラメータについて聞いていないと言って、何を言ってもらえませんでした – parvez

答えて

2

はこれを試してみてください:

得られます
# values = [request.GET.get(p) for p in ['param1', 'param2', 'param3']] 
values = ['val1', 'val2', ''] 
names = ['p1', 'p2', 'p3'] 
query = 'www.api-end-point.com?' 

for i, value in enumerate([v for v in values if v]): 
    query += "{}{}={}".format("&" if i else "", names[i], value) 

query += '&format=json' 

:あなたがしたい場合

www.api-end-point.com?p1=val1&p2=val2&format=json

+0

パーフェクトソリューション、それが動作します – parvez

1

あなたは試みることがあります。

value1 = request.GET.get('param1') if request.GET.get('param1') else None

+0

あなたはほとんど同じ 'if request.GET.get( 'param1' ) value1 = request.GET.get( 'param1') else value1 = None' – parvez

+0

いいえ、それは常にあなたのcase変数に変数を定義しません。 –

+0

これは '&'と ''冗長 ''の ''の問題を解決しません。 – Siegmeyer

1

を[OK]を、これはちょうど、狂気私を運転しました本当に汚れているが実用的なソリューションのチェックコード:

def index2 (request): 
if ....: 
    try: 
     value1,value2,value3 = request.GET.get('param1'),request.GET.get('param2'),request.GET.get('param3') 
    except: 
     value1,value2,value3 = None, None, None 
if value3: 
    api_url = "www.api-end-point.com?p1="+str(value1)+"&p2="+str(value2)+"&p3="+str(value3)+"&format=json" 
elif value2: 
    api_url = "www.api-end-point.com?p1="+str(value1)+"&p2="+str(value2)+"&format=json" 
elif value1: 
    api_url = "www.api-end-point.com?p1="+str(value1)+"&format=json" 
else: 
    api_url = "Whatever/redirect" 
return render(request,'someThing/index.html',{"api_url":api_url}) 

まったくきれいではないため、生産にはお勧めできません。解決策はforループで、他の人が投稿した方がずっときれいです!しかし、これは実行しています....

それは迅速かつ汚れた解決策ですが、これは動作します。私はそれを試してみました。ご質問のコメントを残して:)

+0

@parvez私は編集をしました。これが動作するか教えてください。私はそれが期待どおりに実行されていないのでちょっと怒った。 – hansTheFranz

+0

それは動作しますが、これはこの種の問題に対して非常に素朴な解決策だとは思わないでしょうか?私は他の代替手段を探しています – parvez

+0

はい、それは私が3回書く理由です。しかし、私はそれを動作させることができてうれしい私は夢中になっていた、そして、私は "何か"を作るためにもっと多くの行を書いて....あなたが私のソリューションを他のものと組み合わせるなら、 ;) – hansTheFranz

0

はurllibはを使用してみてください、とeaxample用の地図のdictしている場合:

import urllib 

get_params = {'params1':'p1', 'params2':'p2', 'params3':'p3'} 
query_params = {'format': 'json'} 
for param in get_params: 
    value = request.GET.get(param) if request.GET.get(param) else None 
    if value: 
     query_params[get_paramas.get(param)] = value 

query = urllib.urlencode(query_params) 

api_url = "www.api-end-point.com?%s" % query 
0
params = {k: request.GET[k] for k in request.GET if request.GET[k]} 
関連する問題