首页 > 解决方案 > 如何在 html 中显示 wordcloud?

问题描述

我在 view.py 中创建了 wordcloud 函数。没有错误,但它没有显示在 html 中。

我使用 {{ wordcloud }} 在模板中显示它。

<div style="margin-bottom:20px;"> {{ wordcloud }} </div>
&nbsp;<span id="clipboard-movie"></span><br />
from django.shortcuts import render
from django.http import HttpResponse
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from .models import ArticleData, Category, Keyword

import requests
from urllib.parse import urlparse
from newspaper import Article# Newspaper
import matplotlib.pyplot as plt

import numpy as np
from PIL import Image
from wordcloud import STOPWORDS

def word_cloud(text):
    whale_mask = np.array(Image.open("PK_t.png"))
    stopwords ={'은','입니다'}
    plt.figure(figsize = (20,5))
    #plt.imshow(whale_mask , cmap = plt.cm.gray , interpolation = 'bilinear')
    font_path = 'C:/Users/Jeong Suji/NanumBarunGothic.ttf'
    wc = WordCloud(font_path=font_path,background_color = 'white', max_words=2000, mask = whale_mask,
              stopwords = stopwords)
    wc= wc.generate(text)
    plt.figure(figsize= (10,5))
    plt.imshow(wc,interpolation= 'bilinear')
    plt.axis("off")
    image=plt.show()
    return image

def cloud_gen(request):
    text = ''
    for i in ArticleData.objects.all():
        if __name__ == '__main__':
            text += i.text
    wordcloud = word_cloud(text)
    return render(request, 'articles/index.html', {'wordcloud':wordcloud})

...

没有错误,但 html 中没有显示 wordcloud。

标签: htmldjango-viewsword-cloud

解决方案


这就是我将图像传递给 html 模板的方式。

# Display the generated image:
import matplotlib.pyplot as plt
import io
import urllib, base64
def word_cloud():
    '''your code'''
    plt.imshow(wc, interpolation='bilinear')
    plt.axis("off")

    image = io.BytesIO()
    plt.savefig(image, format='png')
    image.seek(0)  # rewind the data
    string = base64.b64encode(image.read())

    image_64 = 'data:image/png;base64,' + urllib.parse.quote(string)
    return image_64

因此,您应该执行以下操作

def cloud_gen(request):
    '''Your code'''

    wordcloud = word_cloud(text)
    return render(request, 'articles/index.html', {'wordcloud':wordcloud}

注意:在保存图像之前不要调用 plt.show()。plt.show() 重置实例。


推荐阅读