我目前正在使用Flask来提供可视化编程环境。我希望用户能够加载当前系统中的代码,如果他们稍后再回来的话。我尝试过使用:
return redirect(url_for('static', filename='rawxml.txt'))
return redirect(send_from_directory('static', 'rawxml.txt'))
但是,两者都不会提供文件的修改版本,而是似乎是文件的缓存版本。如何提供经常使用新内容重写的文件。
注意:rawxml.txt存储在“静态”目录中,但它是指向实际XML所在位置的sym链接(我也尝试过硬链接)。
答案 0 :(得分:2)
我有静态文件的下一个实现:
hash_cache = {}
@app.url_defaults
def add_hash_for_static_files(endpoint, values):
'''Add content hash argument for url to make url unique.
It's have sense for updates to avoid caches.
'''
if endpoint != 'static':
return
filename = values['filename']
if filename in hash_cache:
values['hash'] = hash_cache[filename]
return
filepath = safe_join(app.static_folder, filename)
if os.path.isfile(filepath):
with open(filepath, 'rb') as static_file:
filehash = get_hash(static_file.read(), 8)
values['hash'] = hash_cache[filename] = filehash
它只是将哈希参数添加到使用url_for
生成的网址。
答案 1 :(得分:1)
未测试:
url = url_for('static', filename='rawxml.txt', t=time.time())
return redirect(url)
如果内容不是动态的,您可以重写它以使用文件的MD5哈希 - 这样您只会在文件更改时使缓存无效。 tbicr的答案看起来就是一个很好的例子。
[更新]
在jQuery方面,做一些像:
$('#some_selector').load('{{ url }}#'+new Date().valueOf());