2017-05-16 6 views
0

DjangoでビューをレンダリングするときにGETパラメータを渡したいと思います。次のように私のコードは次のとおりです。UTF-8でDjangoでGETパラメータを渡す方法

class CustomerList(ListView): 
    model = Customer 
    template_name = 'management/customer_list.html' 

    def get(self, request): 
     search_text = request.GET.get('search_text', '') # check if search_text exists 
     query = Q(name__icontains=search_text) | Q(phone_number__icontains=search_text) 
     object_list = self.model.objects.filter(query).order_by('-regdate', '-id') 
     if object_list.count() == 0: 
      response = redirect('management:customer-create') 
      response['Location'] += '?name=%s' % (search_text) 
      return response 

     context = { 
      'object_list':object_list, 
      'search_text':search_text, 
      'count':self.model.objects.count() 
     } 
     return render(request, self.template_name, context) 

をし、結果のURLは次のようになります:ページが見つかりませんエラー

/customer/=?utf-8?b?L2N1c3RvbWVyL2NyZWF0ZS8/bmFtZT3tmY3quLjrj5k=?=

あなたは私が間違っているのはどう思いますか?

+1

URLが正しくないと思われるが、それは次のようにする必要があります。 – tom

+0

@anoopユーザーが何かを検索しようとすると、パラメータは '?search_text = '''のようになります。検索テキストが英語で他の言語ではないとうまくいきます。 デザインされていますユーザーが顧客を検索しようとしたときに、名前を持つユーザーがいない場合は、「顧客作成ビュー」に移動します –

+0

http://stackoverflow.com/questions/7060940/append-a-querystring -to-url-in-django。 Djangoは** url **(urls.py)のタプルでクエリパラメータを記述するためのfuncitonalityも提供していますが、あなたの問題を解決できない場合は**管理のためのdjango URLを共有してください:customer-create ** – tom

答えて

1

コメントから、urlencode()を使用するという解決策が見つかりました。 (私はURLパラメータを意味する) /顧客/ SEARCH_TEXT =「<検索テキスト>」、またはあなたのURLを意味しない何手の込んだしてくださいすることができます - ?

if object_list.count() == 0: 
    from django.http import QueryDict 
    response = redirect('management:customer-create') 
    q = QueryDict(mutable=True) 
    q['name'] = search_text 
    query_string = q.urlencode() # encodes utf8 string also 
    response['Location'] += '?%s' % (query_string) 
    return response 
関連する問題