2012-03-12 64 views
0
I have a function in views.py 

    def get_interview_type(request): 
     i = None 
     title = request.GET['title'] #Here the title becomes different 
     try: 
      i = Interview.objects.get(title=title) #it looks for that dropdown value 
      #Error according to pdb 
      #-> i = Interview.objects.get(title=title) 
      # (Pdb) 
      # DoesNotExist: DoesNotE...exist.',) 

      if i.interview_type == "Time Series": 
       visit_ids = i.visit_set.all() 
       reference_visit_list = [] 
       for visit in visit_ids: 
        reference_visit_list.append(visit.reference_visit) 
       reference_visit_list.extend(visit_ids) 
       list(set(reference_visit_list)) 
       len_visits=filter(None,reference_visit_list) 
       total_visits = len(len_visits) 
       return render_to_response('export/get_details.html', 
             {'visits':visit_ids,'count':visit_ids.count(), 
             'total_visits':total_visits}, 
             context_instance=RequestContext(request) 
            ) 
      else: 
       return render_to_response('export/get_interview_type.html', 
             {'visits':i.visit_set.all()}, 
             context_instance=RequestContext(request) 
            ) 
     except Interview.DoesNotExist: 
      pass 

當用戶從下拉列表中選擇一個標題時,調用該函數並執行任務。 我現在已經進入了一個字符串,其中包括「&」符號思維,它可以在正常的英語發揮的作用「和」像這樣的: -爲什麼'&'將Django CharField(python字符串)分解成多個部分?

「CI-2-UGI &腸道症狀篩查&表徵」(它是下拉值之一) 現在,當用戶從下拉菜單中選擇該值時,標題不會保持不變,而是標題更改爲CI-2-UGI(在title = request.GET ['title']中)函數執行我收到一個500錯誤頁面。 這是什麼的runserver模式下的錯誤打印

/home/user/cpms/careprep/tags/4.0/careprep/export/views.py(66)get_interview_type()->None - >通 (Pdb)c [11/Mar/2012 22:05:20]「GET/export/get_interview_type /?title = CI-2-UGI%20Bowel%20Symptom%20Screening%20 &%20Characterization HTTP/1.1」 500 64490

另外,當我從標題中刪除'&'符號沒有500頁。 爲什麼這個&造成這個問題?我想這樣每個特殊的符號都會導致同樣的問題。如果有人能指導我解決這個問題,我將不勝感激。

回答

1

因爲&用於分隔查詢字符串中的字段。首先對其進行網址編碼。

+0

嗨伊格納西奧感謝回答您的意思是編碼( 'UTF-8') – 2012-03-12 05:44:26

+0

[編號](http://docs.python.org/library/urllib.html#utility-functions) – 2012-03-12 05:47:07

+0

我試着這個:打印urllib.quote(title.encode('utf-8'))和這個打印urllib.quote_plus(title)。在這兩種情況下,我刪除了'&'但不是實際的,它仍然沒有完整的標題。 – 2012-03-12 05:52:33

0
I studied about URL-encode what Ignacio suggest but i found a clean and better solution. 
Instead of comparing with title i used 'id' <option value=""> which is the primary key(id) for 
Interview Table and modified the code like this: 

def get_interview_type(request): 
    i = None 
    id = request.GET['id'] 
    try: 
     i = Interview.objects.get(id=id) 
     if i.interview_type == "Time Series": 
      visit_ids = i.visit_set.all() 
      reference_visit_list = [] 
      for visit in visit_ids: 
       reference_visit_list.append(visit.reference_visit) 
      reference_visit_list.extend(visit_ids) 
      list(set(reference_visit_list)) 
      len_visits=filter(None,reference_visit_list) 
      total_visits = len(len_visits) 
      return render_to_response('export/get_details.html', 
            {'visits':visit_ids,'count':visit_ids.count(), 
            'total_visits':total_visits}, 
            context_instance=RequestContext(request) 
           ) 
     else: 
      return render_to_response('export/get_interview_type.html', 
            {'visits':i.visit_set.all()}, 
            context_instance=RequestContext(request) 
           ) 
    except InterviewTitle.DoesNotExist: 
     pass 


and for picking the id i use jquery:- 
$(function(){ 
    $("#id_title").bind("change",function(){ 
     id = $(this).find("option[value="+ $(this).val()+"]").val(); 
     url = "../get_interview_type/?id="+id; 
     $.get(url, "", function (d){ 
      $("#interview_dd").html(d); 
     }) 
    }); 
});