2017-09-12 8 views
0

私urls.pyはエントリーがあります。私は値を取得しようとしているジャンゴ:クラスベースビューのURL変数にアクセス

class ResultsView(TemplateView): 

    template_name = os.path.join(APPNAME, "results.html") 

    def dispatch(self, request, *args, **kwargs): 
     query = kwargs['query'] 
     print("HERE: " + str(json.dumps(kwargs, indent=1))) 
     print(self.kwargs['query']) 
     print(self.kwargs.get('query')) 
     print(kwargs['query']) 
     print(kwargs.get('query')) 

     if query is None: 
      return redirect('/') 
     return super(ResultsView, self).dispatch(request, *args, **kwargs) 

    def get_context_data(self, **kwargs): 

     context = super(ResultsView, self).get_context_data(**kwargs) 
     print("HERE: " + str(json.dumps(kwargs, indent=1))) 
     print(self.kwargs['query']) 
     print(self.kwargs.get('query')) 
     print(kwargs['query']) 
     print(kwargs.get('query')) 
     ... 

    # This is just here to test if 'query' is set 
    def get(self, request, query): 
     print(query) 

urlpatterns = [ 

    url(r'^results/(?P<query>).+', views.ResultsView.as_view(), name="results"), 
] 

対応するクラスベースビューと一致urls.pyに設定されているquery変数の値。しかし、私が他のSOの投稿で見つけたさまざまな解決策を試した後(すべての印刷文からわかるように)、何も動いていません。

リクエストが正しいページ(results /)に解決されますが、dictのクエリエントリを印刷しようとすると空文字列が返され、json.dumps(kwargs, indent=1))の出力があるため、urls.pyが適切に設定されていると確信しています。これは

HERE: { 
"query": "" 
} 

私は間違っていますか?

+0

実際のURLを表示できますか?あなたが渡しているクエリのように – Exprator

+0

確かに、ローカルでは、クエリを持つURLは次のようになります: 'http://127.0.0.1:8000/results/australia'ここで' australia'はユーザが設定したクエリ用語です検索バー。 – Sam

+1

あなたは間違いを犯しています。検索語はURLに追加され、そのようなものではありません。http://127.0.0.1:8000/results/?q=australiaあなたはビューでそのパラメータの部分を必要としないでください、request.GET.get( 'q')とあなたは検索用語を取得し、URLからパラメータを削除することを忘れないでください – Exprator

答えて

1

私のコメントを回答としてコピーしてください。あなたはURLの正規表現のパターン部分を見逃しました。 URLを次のように変更してください:

url(r'^results/(?P<query>[\w.-]+)', views.ResultsView.as_view(), name="results") 
関連する問題