Как я могу показать Wordcloud в HTML? - PullRequest
0 голосов
/ 22 июня 2019

Я сделал функцию Wordcloud в view.py. Там нет ошибки, но она не отображается в 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})

...

ошибки нет, но wordcloud не отображается в html.

1 Ответ

0 голосов
/ 01 июля 2019

Так я передал свое изображение в шаблон 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 () сбрасывает экземпляр.

...