2011-05-07 44 views
2

我正在開發一個Django應用程序,它可以在一個頁面上獲取位置,並在該數據庫中搜索該區域中的房地產列表,並在下一頁返回結果。第二頁還顯示在第1頁輸入的位置 我想知道我的代碼出了什麼問題 我通過'ghar'對象訪問該變量的值並將其存儲在名爲javascript的地址變量中我的標題腳本和HTML文件是在JavaScript中使用Django變量與Google API一起使用

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
    <script type=text/javascript" src="{{ MEDIA_URL }}maps.js"></script> 
..... 
<div id="map_canvas"></div> 

我maps.js文件

var geocoder; 
var map; 
var address ="{{ghar.place}}"; 
function initialize() { 
    geocoder = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng(-34.397, 150.644); 
    var myOptions = { 
     zoom: 11, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    } 

    function codeAddress() { 
    geocoder.geocode({ 'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
     map.setCenter(results[0].geometry.location); 
     var marker = new google.maps.Marker({ 
      map: map, 
      position: results[0].geometry.location 
     }); 
     } else { 
     alert("Geocode was not successful for the following reason: " + status); 
     } 
    }); 
    } 

加爾是具有由Django模型存儲在數據庫中的位置屬性的對象的名稱

我已經做了一些變更,本 這就是我目前停留在

確定...我試圖做這件事...... 我已經把我的jQuery的JavaScript的HTML文件本身 HTML文件現在即使到這個頁面和「查看源代碼」變量地址的值

<!DOCTYPE HTML> 
<html> 
    <head><title>Ghar Nivas</title> 
     <link type="text/css" rel="stylesheet" href="{{ MEDIA_URL }}searchresult.css" /> 
    <link type="image/png" rel="icon" href="{{ MEDIA_URL }}gharnivaslogo.png"> 
    <script type="text/javscript" src="{{ MEDIA_URL }}jquery.js"></script> 
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
    <script type="text/javascript"> 


var address = {{ area }}; 
var geocoder; 
var map; 

function codeaddfunc(){ 
      geocoder = new google.maps.Geocoder(); 
     var latlng = new google.maps.LatLng(-34.397, 150.644); 
     var myOptions = { 
     zoom: 11, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
      } 
     map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
      geocoder.geocode({ 'address': address }, function(results, status) { 
       if (status == google.maps.GeocoderStatus.OK) { 
        map.setCenter(results[0].geometry.location); 
       var marker = new google.maps.Marker({ 
          map: map, 
          position: results[0].geometry.location 
        }); 
       } else { 
        alert("Geocode was not successful for the following reason: " + status); 
       } 
     } 


</script> 
    </head> 
    <body class="back" onload="codeaddfunc()"> 
    <div align="right" ><a href="/">Home</a></div> 
    <img height="180" width="500" src="{{ MEDIA_URL }}ghar.png" alt="logo here"/> 
     <table > 
      <tr valign = "top" > 
       <td width="20%" > 
      <h3 class="whitecolor">Search</h3> 
        <label class="whitecolor">Price Range</label> 
      <form action="/second_search/" method="get" > 
        <div class="whitecolor" > 
        From: <input type="text" name="fromRange" placeholder="5000" id="fromRange" style="width:100px;" />&nbsp;<br/> 
        To: &nbsp;<input type="text" name="toRange" placeholder="10000" id="toRange" style="width:100px;" /> 
       </div> 
       <br /> 
       <div class="whitecolor" > 
        Specify Area: <input type="text" name="txtSearch" id="txtSearch" style="width:100px;" /> 
       </div> 
       <input type="submit" value="Search Again" /> 
      </form> 
       </td> 
       <td bgcolor="#FFFFFF"><br/></td> 
       <td> 
        <div> 
         <table width="500px"> 
          <tr> 
           <td> 
       {% if ghar %} 
        {% for g in ghar %} 
        <div class="whitecolor" > 
              <a href="/venture/{{ g.id }}/">{{ g.nameOfVenture }}</a> <br/> 
         Location: {{ g.place }}<br/> 
         Price: {{ g.price }} 
         Ownner Name: {{ g.ownerName }}<br/> 
         Owner Contact: {{ g.ownerContact }}<br/> 
        </div> 
        <hr /> 
        {% endfor %} 
       {% else %} 
        <p class="whitecolor" >No gharnivas matched your search criteria.</p> 
       {% endif %} 
           </td> 
          </tr> 
         </table> 
      </div> 
       </td> 
       <td > 


        <div id="map_canvas"></div> 

       </td> 
      </tr> 
     </table> 
    </body> 
</html> 

當屬在前面的頁面中指定的一個,因爲我已經創造了Django的全局變量稱爲區域

即使相應的地圖沒有顯示在th中e HTML頁面

您認爲這是什麼原因? 我在哪裏出錯

+0

代碼是正確的。最可能的事情可能是,你沒有通過Django服務js文件。即將其作爲靜態文件發送給瀏覽器,而無需任何與模板相關的處理。評論? – 2011-05-07 12:20:42

回答

2

Django根本處理您的JavaScript文件嗎?如果您使用的是staticfiles應用程序,或者讓您的Web服務器直接提供靜態文件,則您的變量將永遠不會被替換。

你有兩個選擇:

  • 要麼成爲其dinamically創建
  • 或聲明一個全局變量JS代碼。

對於前一種選擇,您可以執行類似this(該參考針對CSV文件,但適用於任何其他內容類型)。這將有缺點,你必須重新生成你的整個JS文件,每次爲該變量。

因爲你可以做這樣的事情在你的模板

<script type=text/javascript">var address = "{{ ghar.place|escapejs }}";</script> 

作爲一個變體,而不是使用全局變量的一種選擇,你可以把它作爲一個參數傳遞給函數。

+0

爲了您的安全,您應該使用引號aroud變量加'escapejs'過濾器('var address =「{{ghar.place | escapejs}}」;')(http://docs.djangoproject.com/en/1.3/ref/templates/builtins /#escapejs) – Jerzyk 2011-05-07 12:22:15

+0

你是絕對正確的:如果ghar模型由一個不可信任的人填充(例如你),你應該總是注意​​逃避。在任何情況下這樣做都不會造成傷害。 – Andrea 2011-05-07 12:26:43

+0

甚至信任:)以確保引號,新行和其他特殊字符將被轉義 – Jerzyk 2011-05-07 12:29:17