2017-08-10 1 views
0

私の問題に何の答えもせずに検索しています。私は良い方法で進めるかどうかわかりませんが、私はこのようなURLを持っています:article/title/0/search=ad/2017-08-01/2017-08-09/;パラメータは(中かっこ):article/{filter}/{page}/search={search}/{date1}/{date2}/です。Django url複数のパラメータ

マイurl.py正規表現は次のとおりです。

url(r'article/(?P<filter>.+)/(?P<page>\d+)/(?:search=(?P<search>.*)/)?(?:(?P<date1>(\d{4}-\d{1,2}-\d{1,2})?)/)(?:(?P<date2>(\d{4}-\d{1,2}-\d{1,2})?)/)?$')

searchdate1date2が記入されている場合、私のURLが{searched word}/2017-08-01/2017-08-09/search値だと思います。

search,date1およびdate2が空の場合、私のリンクはarticle/title/0/search=///のようになります。日付が記入されたときarticle/title/0/search=/2017-08-01/2017-08-09/。私のテンプレートで

は、私はこのようなことに私のURLが必要です:{% url "view" filter page search date1 date2 %}

誰かが私を助けて、私は間違った方法でそれをやったなら、私を修正することはできますか?

EDIT

私は別の方法で私の問題を再度お願いしてみましょう:search, date1 and date2を必要としない3つのフィールドを持つフォームを持っている中で、私のテンプレートで

ので、彼らはNoneにすることができます(これは私の問題です)。私は、ビューのパラメータfilter, pageの1つだけを変更し、URLにフィールドのパラメータを保持する必要のあるリンクをいくつか持っています。 フォームが私のビュー(実際にはdef AllArticle(request, filter, page, search="", date1="", date2="")のようなものです)にPOSTされているとき、私はそれらを使ってArticleModelオブジェクトをフィルタリングします。

@Cory_Maddenによると、以前はこの方法を使用していませんでした。使用方法はわかりません。私はちょうどそれを試み、djangoは私にMultiValueDictKeyErrorを返します。

+0

あなたのモデルは何か、フィルタリングや検索をしようとしているものはもっと具体的になりますか?あなたのモデルとフィルタ要件をより明確に投稿してください。 –

+0

GETパラメータを '?'で区切ったものは、'urls.py 'で*表示されません。 URL自体のみ。 –

答えて

1

これはGETパラメータを使用する方法ではありません。 requestオブジェクトからアクセスする必要があります。それでは、あなたが機能ベースのビューを持っているとしましょう、これはあなたのURLに付加される任意のGETパラメータにアクセスする方法を次のとおりです。

def index(request, name='World'): 
    search_param = request.GET['search'] 
    ... 

この場合のURLは次のようになります。

url(r'/(?P<name>.*)', views.index) 

要求

/Joe?search=search-term 

そしてrequest.GET['search']"search-term"を返します:ようなあなたのアドレスバーにパスはその後になります。

+0

これは動作しません。それは私にMultiValueDictKeyエラーを送ります。 – Trytio

+0

URLにGETパラメータを指定していない可能性が最も高いです。これを 'search_param = request.GET.get( 'search'、 '')'に変更します。 –

関連する問題