@blackbb

Как вывести две функции в одной в views.py?

Нужно чтобы это все было на одной странице. Сейчас каждая функция на отдельной странице выдает решение.
Функция k_means и ier:
def k_means(request):
    import django
    from gigaapp.k_means_app import main
    canvas=main()
    response=django.http.HttpResponse(content_type='image/png')
    canvas.print_png(response)
    return response


def ier(request):
    import django
    import xlrd
    import matplotlib
    matplotlib.use('Agg')
    from scipy.spatial.distance import pdist
    from scipy.cluster.hierarchy import linkage, dendrogram
    from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
    from matplotlib import pyplot as plt
    
    rb = xlrd.open_workbook(os.path.dirname(__file__)+'/data.xlsx')
    sheet = rb.sheet_by_index(0)
    x = [sheet.row_values(rownum) for rownum in range(sheet.nrows)]
    del (x[0])
    i=0
    n=len(x)
    while i<n:
        del x[i][0]
        i=i+1
    fig=plt.figure(figsize=(15, 10))
    ax=fig.gca()
    ax.yaxis.set_visible(False)
    plt.title('Clustering')
    plt.xlabel('Index')
    y=pdist(x)
    data=linkage(y)
    dendrogram(data,color_threshold=1,show_contracted=True)
    canvas=FigureCanvas(fig)
    response=django.http.HttpResponse(content_type='image/png')
    canvas.print_png(response)
    return response

def current_ier(request):
   return ier(request)

def current_kmeans(request):
    return k_means(request)

Если делать так
def ier_kmeans(request):
    a = k_means(request)
    b = ier(request)
    return render(request, 'some_template.html', {'a': a, 'b': b})

то выдает ошибку
'utf8' codec can't decode byte 0x89 in position 27: invalid start byte. You passed in <HttpResponse status_code=200, "image/png"> (<class 'django.http.response.HttpResponse'>)
  • Вопрос задан
  • 523 просмотра
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
View должны возвращать HttpResponse

def ier_kmeans(request):
    a = k_means(request)
    b = ier(request)
    return render(request, 'some_template.html', {'a': a, 'b': b})
Ответ написан
fox_12
@fox_12 Куратор тега Django
Расставляю биты, управляю заряженными частицами
Тема не раскрыта.
Непонятно какие данные вы в функциях k_means и ier возвращаете.
И что хотите в итоге вернуть.
Если вы в первой и второй функции возвращаете объекты типа request - просто передайте его во вторую функцию. А результат второй функции - верните. Если возвращаете какие-то переменные - то верните контекстом к ответу как того советует Сергей Горностаев
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы