Django生成的WordCloud词云已成功生成但前端页面无法显示问题求助
问题原因梳理
- 你调用
wcloud.to_file('Wordcloud.png')时,图片默认保存在Django项目的根目录,没有存到Django可识别的静态文件目录中,{% static %}模板标签无法读取根目录的文件 to_file()方法返回的是写入文件的字节数,不是图片路径,你传给模板的image变量完全没有生效- 多用户同时访问时,直接写同名的
Wordcloud.png会出现文件覆盖问题,动态生成的临时图片不建议直接存本地静态文件
方案1:直接生成base64图片传递给模板(推荐,无需处理静态文件配置)
第一步:修改views.py中生成词云的逻辑
把原来的cloudtofile = wcloud.to_file('Wordcloud.png')替换为以下代码:
# 删掉原有to_file相关代码,新增以下内容 image_buffer = io.BytesIO() wcloud.to_image().save(image_buffer, format='PNG') image_buffer.seek(0) image_base64 = base64.b64encode(image_buffer.getvalue()).decode()
修改render的传参:
return render(request, 'tweet/tweet-list.html', {'form': form, 'tweet_id':tweet_id, 'tweets': tweet,'image_base64': image_base64})
第二步:修改HTML模板的图片引用
把原有静态图片引用替换为base64格式:
<img src="data:image/png;base64,{{ image_base64 }}" alt="词云">
方案2:存到静态文件目录的修改方法
第一步:配置静态文件写入路径
在settings.py中确认静态文件配置:
STATIC_URL = '/static/' # 配置静态文件读取目录 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
在项目根目录新建static文件夹,给足服务器写入权限。
第二步:修改views.py里的保存路径
# 头部引入settings from django.conf import settings # 把原有to_file代码修改为指定静态目录路径 save_path = os.path.join(settings.STATICFILES_DIRS[0], 'Wordcloud.png') wcloud.to_file(save_path)
注意:该方案需要解决多用户访问的文件覆盖问题,建议生成随机文件名代替固定的Wordcloud.png
额外注意点
- 你的
home视图中直接把clean_tweet_id(request)的返回值(HttpResponse对象)塞到context里是错误的,如果home是站点访问入口,建议直接把clean_tweet_id的逻辑合并到home中,或者调整路由直接指向clean_tweet_id视图。
内容的提问来源于stack exchange,提问作者Vladimir George
相关产品推荐
相关产品推荐

