我有兩個模板(initial.html
和index.html
)包含(其中包含的東西)一個表單。我使用此表格中的數據生成csv(data.csv
),然後在index.html
中讀取它,這要歸功於d3
和parcoords.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();
});
我也認爲這是一個緩存問題,我用你的技巧,但d3的可視化不再可見,就好像它不找到CSV的路徑。 (考慮到我不是一個JavaScript專家,我試過Math.random()。toString()猜測它是一個類型問題,但它也不起作用) – kwn 2015-04-05 18:46:43
它只是一個URL。檢查您的瀏覽器控制檯和Flask日誌以查看可能出錯的地方;添加一個查詢參數(帶'?')應該可以工作。 – 2015-04-05 18:54:24
我有'var test ='static/csv/data.csv?_ ='+ Math.random();'到'main.js',我的瀏覽器控制檯返回的確是一個有效的URL,那可視化仍然是不可見的。 – kwn 2015-04-05 19:06:53