2016-08-17 29 views
0

我目前有一個名爲myVariableToSend的javascript變量,它包含一個字符串,我需要發送到我的視圖中,我可以使用原始SQL查詢從數據庫中收集相應的數據,它回到我的JavaScript。以下是我有:將Javascript變量傳遞給Django與getJSON的views.py

的Javascript:

function scriptFunction(myVariableToSend){ 

     $.getJSON("http://127.0.0.1:8000/getData/", myVariableToSend, function(serverdata){ 
     window.alert(serverdata); 
}); 

Views.py:

def getData(request): 
    some_data = request.GET(myVariableToSend) 
    cursor = connection.cursor() 
    cursor.execute("SELECT Car_ID FROM cars WHERE Carname = %s ", [some_data]) 
    row = cursor.fetchall() 
    return JsonResponse(row, safe = False) 

Urls.py:

url(r'^admin/', include(admin.site.urls)), 
url(r'^$', startpage), 
url(r'^getData/$', getData), 

我不不認爲我的服務器端腳本(views.py)正在工作,因爲當我運行我的服務器時,我得到一個http500錯誤。任何幫助,將不勝感激。謝謝。

UPDATE:

我發現,當我註釋掉我的整個Views.py只有放

def getData(request): 

return JsonResponse({"hello":"World"}, safe = False) 

我沒有得到任何的問題和AJAX請求工作。但是當我有我的原始getData時,它不起作用。當我在我的views.py加入這一行:

some_data = request.GET(myVariableToSend) 

,我得到一個錯誤和數據不顯示

+0

爲什麼使用原始SQL查詢?你沒有想出Django的核心特性ORM嗎?那麼你應該真的做的教程。 –

+0

是的,我知道Django的ORM,但我想這樣做。它用於學習目的。 – Carbon

+0

您應該將DEBUG設置爲True。如果你這樣做了,你會看到你在該函數的第一行中得到一個NameError,因爲變量myVariableToSend沒有被定義。 –

回答

1

如果妳想要發送烏爾變量視圖功能,U可以捕捉它與網址,例如:

$.getJSON('http://127.0.0.1:8000/getData/' + myVariableToSend +'/', function (serverdata) { //do ur work} 

然後在urls.py您有:

url(r'getData/(?P<my_var>\w+)/$', views.get_data, name='get_data') 

然後views.py中:

def get_data(request, my_var): 
#do ur work here 
+0

通過URL而不是通過請求發送數據不是不好的做法嗎? – Carbon

+0

如果你的數據是敏感的,那麼也許它是。我在我的項目中使用這個解決方案,但是通過URL發送的數據不是私有的。 –

+0

有沒有辦法通過傳遞數據而不是url來請求數據?我感謝你的回答,但我只想看看如何完成其​​他方式。謝謝。 – Carbon

1

回答原來的問題:

你的服務器可能失敗,因爲在views.py

some_data = request.GET(myVariableToSend) 

myVariableToSend語法錯誤是不確定的在這裏。所以,你應該得到這樣的:

some_data = request.GET['myVariableToSend'] 

除了原題:

如果您嘗試設置您的Django應用程序一樣this.You可以查詢你會得到很多頭疼的你數據庫方式更容易,如果你使用Django的ORM。閱讀關於它here。另外,如果您想將模型中的數據發送到您的JavaScript代碼,您可以使用類似Django REST Framework的框架節省大量時間。