2012-08-09 64 views
3

我的問題涉及Google Maps JavaScript API。更具體的自動完成功能。Django - 將js變量傳遞給django視圖

我已經添加了自動完成功能作爲搜索欄到我的測試網站,這工作正常,但現在我想通過選擇的參數到Django視圖。在這裏,我卡住了。

這是我在我的模板:

<script src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script> 
<script type="text/javascript"> 
    function initialize() { 
     var input = document.getElementById('searchTextField'); 
     var autocomplete = new google.maps.places.Autocomplete(input); 
    } 
    google.maps.event.addDomListener(window, 'load', initialize); 
    google.maps.event.addListener(autocomplete, 'place_changed', function() { 
    var place = autocomplete.getPlace(); 
    }); 
</script> 

<form method="post" action="">{% csrf_token %} 
    <input id="searchTextField" type="text" placeholder="Enter a location" autocomplete="on"> 
    <input type="submit" value="Search" class="postfix button"/> 
</form> 

而這在我看來:

def homepage(request): 
    if request.method == 'POST': 
     location = request.POST 
else: 
    location = '' 
return render_to_response('homepage.html', {'location':location}, context_instance = RequestContext(request)) 

我想要做的是通過變量「地方」的變量「位置'在我的Django視圖中(var的地方應該包含lat和lon,並且這個我想在Geodjango中繼續使用)。 request.POST給出以下內容:<QueryDict: {u'csrfmiddlewaretoken': [u'4xp3nNwzeITb1zHhkBkSGlZSPtGwmuMB']}>但是,我不能使用。

是否可以將var地點的內容傳遞給django視圖?

感謝您的反饋!

編輯: 我的解決方法使用geopy的時刻:

模板:

<input id="searchTextField" name="searchTextField" type="text" placeholder="Enter a location" autocomplete="on"> 

查看:

if request.method == 'POST': 
    location = request.POST.get('searchTextField') 
    gn = geocoders.Google() 
    place, (lat, lng) = gn.geocode(location) 

還在尋找一種方式來訪問var placescript。這可能嗎?

+1

創建一個隱藏字段,並使用JavaScript將其值設置爲'place';並在表單的提交按鈕上使用jquery觸發填充。 – 2012-08-10 07:33:19

+0

@布爾哈里德說了些什麼。您需要使用javascript來獲取表單中的位置值,然後當您提交表單時,它將被髮送到您的Django視圖,並且您可以用同樣的方式訪問它...'request.POST.get('place') '。 – 2012-08-10 22:31:14

+0

Thx回覆。添加腳本的末尾我添加了以下內容:'document.getElementById('place')。value = autocomplete.getPlace();'並在'form'中插入了一個額外的輸入字段:''。但是'place'字段的值仍然是空的。這是因爲在提交表單之前不會計算'var place'? – 2012-08-11 07:40:07

回答

3

首先將一個name屬性添加到您的搜索輸入。假設你把它叫做searchTextField,比如id。那麼你可以做request.POST.get('searchTextField')

+0

Thx的答覆。的確,昨天晚上,我根據該字段的名稱構建了一個解決方法。看到我的更新。但仍然在尋找一種方法來訪問'script'中的'var place'。 – 2012-08-10 07:03:52