2017-10-12 67 views
1

我在pythonanywhere.com上託管的Django應用程序不支持utf-8編碼。像'é'這樣的字符會返回錯誤。「utf-8」編碼在開發服務器上工作,但未部署時

瀏覽

def result_view(request): 
    if request.method == 'POST': 
     search = request.POST.get('textfield').encode("utf-8") 
     print search 

     try: 
      try: 
       value = wikipedia.page(search) 
       title = value.title 
       url = value.url 
       print title 
       data = wikipedia.summary(search, sentences=10) 

      except wikipedia.exceptions.DisambiguationError as e: 
       data = e 
       title = search + " (Disambiguation)" 
       u = search.replace(" ", "_") 
       url = "https://en.wikipedia.org/wiki/" + u 

     except: 
      raise Http404() 

     return render(request, "search/result.html", {'title': title, 'url': url, 'data': data}) 

    else: 
     return render(request, "search/result.html", {}) 

textfield輸入編碼與UTF-8和工作在Django開發服務器不錯,但在我的pythonanywhere服務器返回404頁。

模板

<form name="myform" method="POST" action="{% url 'result' %}"> 
    <div class="form-group"> 
     <div class="input-group"> 
      {% csrf_token %} 
      <input type="text" class="form-control" name="textfield" placeholder="Search" required/> 
      <div class="input-group-addon"> 
       <span class="glyphicon glyphicon-search"></span> 

      </div> 
     </div> 
    </div> 

    <button type="submit" class="btn btn-danger btn-lg ">Search</button> 
</form> 
+0

我相信你必須允許Pythonanyhere使用的數據庫(它應該是MySQL,但可能已被更改)使用編碼utf-8。 –

+2

你的外嘗試/ except/404吞噬了真正的錯誤。擺脫它,看看日誌中的實際回溯是什麼?它可能不會涉及任何類型的數據庫...... – hwjp

回答

1

你必須允許Pythonanyhere使用(它應該是MySQL作爲從here但可能已經改變)來使用編碼UTF-8,要做到這一點的DB,只需啓動一個MySQL控制檯,然後運行下面的命令(你的數據庫的名稱替換數據庫名稱,當然):

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci; 

然後,對每個表運行此:

ALTER TABLE tablename CHARACTER SET utf8 COLLATE utf8_general_ci; 

Utf-8是用於存儲非拉丁字符的標準編碼(例如,西里爾文),然後你需要改變它的字符集和排序規則設置,首先在你的數據庫上,然後在每張表上。

如果你有很多表,你可以使用存儲過程執行這些命令。

+0

我相信這是針對數據庫驅動的應用程序。我的應用程序不需要數據庫。它只是通過Wikipedia API請求用戶輸入。所以當用戶輸入有特殊字符時,它在開發服務器上可以正常工作,但不能在生產環境中工作 –

+0

「在Django開發服務器中工作正常」,所以基本上你會說你拿出字符串告訴Django DB使用了什麼(默認情況下它的SQLlite實例)。此外,「我的Django應用程序託管在pythonanywhere.com不支持utf-8編碼」這不是關於你的應用程序,但你在哪裏「託管它」,並且可能100%他們使用數據庫,從鏈接它是一個MYSQL實例,他們正式說明如何通過deafault是數據庫字符集 。數據存儲在數據庫中以保持持久性。順便說一句,我試圖有用,試試看。 –

相關問題