2017-05-16 4 views
0

Ich möchte einen GET-Parameter beim Rendern einer Ansicht in Django übergeben. Mein Code ist wie folgt:Wie Übergeben eines GET-Parameters in Django in UTF-8

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) 

und die daraus resultierende URL lautet:

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

mit Seite nicht gefunden Fehler

Was denken Sie, mache ich falsch?

+1

url scheint falsch zu sein, sollte es so sein - /Kunde/search_text = '', oder können Sie bitte erarbeiten, was gemeint Ihre URL bedeutet (i die URL-Parameter bedeuten?). – tom

+0

@anoop wenn der Benutzer versucht, etwas zu suchen, der Parameter geht wie '? Search_text = ''' wie du erwähnt ... es geht gut, wenn der Suchtext ist in Englisch, aber nicht andere Sprachen .. ist es entworfen so: Wenn der Benutzer versucht, einen Kunden zu suchen, und es gibt niemanden mit dem Namen, geht es zu einem "Kunden erstellen Ansicht" –

+0

können Sie http://stackoverflow.com/questions/7060940/append-a-querystring lesen -zum-url-in-django. Django gibt uns auch Funcitonality Abfrage Parameter in Tupel von ** url ** (urls.py) zu erwähnen, wenn immer noch nicht Ihr Problem löst, können Sie bitte django URL für ** Management teilen: customer-create ** – tom

Antwort

1

Aus dem Kommentar fand ich die Lösung, die urlencode() verwenden sollte.

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 
Verwandte Themen