2015-04-05 58 views
0

我有兩個模板(initial.htmlindex.html)包含(其中包含的東西)一個表單。我使用此表格中的數據生成csv(data.csv),然後在index.html中讀取它,這要歸功於d3parcoords.js。每一個新的提交產生一個新的data.csv重新加載一個csv文件並用它調用相同的視圖

事情是,在第一次調用,一切似乎工作,但我嘗試提交新的值的形式時,可視化不會改變(即使文件data.csv似乎改變當我用TextEdit打開它時)

而且,我提供給視圖的數據(values)也不會改變。 我知道不建議在POST提交後調用相同的視圖,但即使我嘗試調用不同的視圖,仍然存在以下兩種問題。是

的代碼相關部分如下:

main.py

@app.route('/', methods=['POST','GET']) 
def main(): 

    global maxDepth 
    global numberOfRelated 

    if request.method=='POST': 
     url = request.form['url'] 
     maxDepth = int(request.form['depth']) 
     numberOfRelated = int(request.form['numberOfRelated']) 
     values = crawling(url,maxDepth,numberOfRelated) 
     return render_template('index.html',var=values) 
    return render_template('initial.html') 

crawling功能

def crawling(url,maxDepth,numberOfRelated): 

    start = time.time() 

    initialID = get_id(url) 

    videosId.append([0,initialID]) 
    getAllID(1,initialID) 

    getVideoData(videosId) 
    if os.path.exists('static/csv/data.csv'): 
     os.remove('static/csv/data.csv') 

    with open('static/csv/data.csv','wb') as csvData: 
     dataWriter = csv.writer(csvData, delimiter='|', quotechar='|', quoting=csv.QUOTE_MINIMAL) 
     dataWriter.writerow(['Depth']+['ID']+['Title']+['Popularity']+['Occurency']) 
     for x in xrange(0,len(videosData)): 
      dataWriter.writerow([videosData[x].level]+[videosData[x].id]+[videosData[x].title.encode("utf-8")]+[videosData[x].popularite]+[videosData[x].occurence]) 

    timeExecution = round(time.time() - start,1) 
    mostFrequent = mostFrequentVideo() 
    mostPopular = mostPopularVideo() 
    initialVideo = videosData[0] 

    return [initialVideo,mostPopular, mostFrequent, len(videosData), timeExecution] 

形式

<nav class="navbar formSpace"> 
    <div class="container"> 
     <form class="form-inline" action="" method="POST"> 

     <div class="service form-group"> 
      <i class="fa fa-youtube fa-2x"></i>   
     </div> 
      <div class="form-group"> 
      <input type="text" class="form-control" id="mainForm" placeholder="https://www.youtube.com/watch?v=2HIuN5lxMCI" name="url" /> 
      </div>    
      <div class="form-group minorForm"> 
      <input name='numberOfRelated' type="text" class="form-control" placeholder="Number of suggestion" /> 
      </div> 
      <div class="form-group minorForm"> 
      <input name='depth' type="text" class="form-control" placeholder="depth" /> 
      </div> 

      <div class="form-group navbar-right"> 
      <button class="btn btn-success minorForm generate" type="submit"> Generate</button> 
      </div> 
     </form> 
    </div> 
</nav> 

main.js

var pc0; 

var blue_to_brown = d3.scale.linear() 
    .domain([0, 5]) 
    .range(["red", "#3498db"]) 
    .interpolate(d3.interpolateLab); 


d3.csv('static/csv/data.csv?_='+ Math.random(), function(data) { 
pc0 = d3.parcoords()("#example0") 
    .data(data) 
    .showControlPoints(false) 
    .hideAxis(["Title"]) 
    .hideAxis(["ID"]) 
    .composite("darker") 
    .width(860) 
    .color(function(d) { return blue_to_brown(d['Depth']);}) 
    .render() 
    .alpha(0.35) 
    .brushMode("1D-axes") 
    .reorderable() 
    .interactive(); 
}); 

回答

1

瓶提供靜態文件告訴瀏覽器緩存文件而積極。默認是告訴瀏覽器將文件緩存12小時。

您可以通過向URL添加隨機值來繞過此緩存;

d3.csv('static/csv/data.csv?_=' + Math.random(), function(data) { 

現在,瀏覽器每次都會將此視爲新URL,而不是重新使用緩存文件。

+0

我也認爲這是一個緩存問題,我用你的技巧,但d3的可視化不再可見,就好像它不找到CSV的路徑。 (考慮到我不是一個JavaScript專家,我試過Math.random()。toString()猜測它是一個類型問題,但它也不起作用) – kwn 2015-04-05 18:46:43

+0

它只是一個URL。檢查您的瀏覽器控制檯和Flask日誌以查看可能出錯的地方;添加一個查詢參數(帶'?')應該可以工作。 – 2015-04-05 18:54:24

+0

我有'var test ='static/csv/data.csv?_ ='+ Math.random();'到'main.js',我的瀏覽器控制檯返回的確是一個有效的URL,那可視化仍然是不可見的。 – kwn 2015-04-05 19:06:53

0

好了,我終於找到了解決辦法

通過的Martijn Pieters的建議訣竅工作完全正常,這個問題是從我的CSV格式的到來。 (我用的是'|'而不是''',D3不喜歡這樣),

相關問題