Проблем със свързването между скрипт на python, рамка на колба и html

Имам странен проблем с прехвърлянето на правилните данни от моя python скрипт към графика (highcharts) в моя html. Използвам уеб рамка на Flask и сървър на Ubuntu. Имам две идентични html уеб страници по структура, но те се различават по предаваните към тях данни (данните произхождат от две отделни dbs). Всяка уеб страница има множество графики (високи диаграми), една конкретна графика на втората уеб страница връща неправилни точки с данни. Той връща точките от данни, предназначени за първата уеб страница. Този проблем не се появява, когато тествам на моя локален хост, само когато се изпълнява на сървъра (да, правилно съм копирал файловете на моя сървър). Тъй като може да не сте в състояние да определите проблема, всякакви идеи по отношение на отстраняване на неизправности или причини, поради които моят сървър на Ubuntu не се опреснява правилно, са много добре дошли. Извинявам се, ако този въпрос е неясен, това не е най-лесният проблем за предаване чрез текст. Ето примерен код... Изпълнявам скриптове в python на моя сървър и те се предават на моя html чрез моя init файл на колбата.

PYTHON СКРИПТ

import os, sqlite3, datetime, pandas as pd, numpy as np

PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
DATABASE = os.path.join(PROJECT_ROOT, 'folder', 'my.db') 
conn = sqlite3.connect(DATABASE) 
c = conn.cursor()

averages_lm = (pd.read_sql("SELECT AVG(points_for) AS points_for, AVG(points_against) AS points_against, \
                          AVG(num_moves) AS moves, AVG(num_trades) AS trades, AVG(wins) AS wins, AVG(losses) AS losses, \
                          manager_name FROM standings WHERE curweek > 14 GROUP BY manager_name", conn))

averages_ex = (pd.read_sql("SELECT AVG(points_for) AS points_for, AVG(points_against) AS points_against, \
                          AVG(num_moves) AS moves, AVG(num_trades) AS trades, AVG(wins) AS wins, AVG(losses) AS losses, \
                          manager_name FROM standings_ex WHERE curweek > 14 GROUP BY manager_name", conn))


def averages_LM():
    global averages_lm
    return averages_lm

def averages_EX():
    global averages_ex
    return averages_ex

НАЧАЛЕН ФАЙЛ

from flask import Flask, render_template, session, request, jsonify, json
import requests
import os, sys

PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(PROJECT_ROOT, 'Yahoo_Fantasy'))

from stats_fantasy import *

app = Flask(__name__)

@app.route('/html1')
def LowerMerion():

    averages = averages_lm()
    len_averages = len(averages['managers'])
    return render_template("html-1.html", title="title", averages=averages, len_averages=len_averages)

@app.route('/html2')
def SimgaChi():

    averages = averages_ex()
    len_averages = len(averages['managers'])
    return render_template("html-2.html", title="title", averages=averages, len_averages=len_averages)


if __name__ == "__main__":

    app.run(debug=True)

HTML (фрагмент)

<script>
$(function () {
    $('#chart-4').highcharts({
        chart: {
            type: 'column'
        },
        title: {
            text: 'Career Averages Per Season '
        },
        subtitle: {
            text: 'Regular Season'
        },
        xAxis: {
            categories: [ {% for i in range(len_managers) %} '{{ averages.manager_name[i] }}', {% endfor %}

            ],
            crosshair: true
        },
        yAxis: {
            min: 0,
            title: {
                text: 'Total Per Season'
            }
        },
        tooltip: {
            headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
            pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
                '<td style="padding:0"><b>{point.y:.1f} pts</b></td></tr>',
            footerFormat: '</table>',
            shared: true,
            useHTML: true
        },
        plotOptions: {
            column: {
                pointPadding: 0.2,
                borderWidth: 0
            }
        },
        series: [{
            name: 'Avg Wins',
            data: [{% for i in range(len_managers) %} {{ averages.wins[i] }}, {% endfor %}]

        }, {
            name: 'Avg Losses',
            data: [{% for i in range(len_managers) %} {{ averages.losses[i] }}, {% endfor %}]

        }, {
            name: 'Avg Moves',
            data: [{% for i in range(len_managers) %} {{ averages.moves[i] }}, {% endfor %}]

        }, {
            name: 'Avg Trades',
            data: [{% for i in range(len_managers) %} {{ averages.trades[i] }}, {% endfor %}]

        }, {
            name: 'Avg Draft Pick',
            data: [{% for i in range(len_managers) %} {{ draft_pos.pick[i] }}, {% endfor %}]

        }, ]
    });
});
</script>

Отново става нещо странно...тъй като скриптът ще се промени, когато променя текста за графиките, но по каквато и да е причина данните, които му се предават, са данните от функцията averages_LM(). Мисля, че неправилно му предадох тези данни от самото начало и сега изглежда не иска да се промени.


person Ceej    schedule 17.07.2015    source източник
comment
Намалих кода, за да се опитам да включа само важните фактори поради дължината му. Моля, уведомете ме, ако има някаква уместна информация, която не съм представил или не съм представил правилно първия път. Благодаря   -  person Ceej    schedule 18.07.2015
comment
Можете ли да покажете какво е генерирано от страна на клиента (html) на тези места: {% for i in range(len_managers) %} {{ draft_pos.pick[i] }}, {% endfor %}?   -  person Paweł Fus    schedule 21.07.2015
comment
Тъй като работи на моя локален хост, аз основно изтрих всичко от сървъра си и го замених с работната си среда и сега всичко работи.   -  person Ceej    schedule 22.07.2015


Отговори (1)


След първи преглед на вашия код изглежда, че връщате едни и същи данни в двата изгледа. Линията:

averages = averages_LM()

е еднакъв и в двата изгледа, не би ли трябвало да е един от тях

averages = averages_EX()

?

Освен това, ако вашите два html шаблона са идентични, не е необходимо да създавате две отделни страници, можете просто да имате един шаблон за двата изгледа, съдържанието на шаблона ще зависи от данните, които предавате от изгледа.

person tagette    schedule 19.07.2015
comment
Извинявам се, това беше грешка в поста ми. Коригирах, така че началният файл да връща правилните функции. Мога да опитам да върна единичен html шаблон и да видя как това може да помогне. Имам обаче подобни функции и скриптове, които работят добре в рамките на едни и същи скриптове на python и html, така че не съм сигурен, че това ще поправи нещата. По-скоро е извличането или натискането на данните, някои неща изглежда се актуализират незабавно, докато други модификации на python/init нямат ефект. - person Ceej; 19.07.2015
comment
Никакви проблеми. Наличието на само един шаблон не би трябвало да помогне за вашия проблем, но просто прави кода по-лесен за поддръжка. Вашият javascript във вашия html файл ли е или в отделен файл? - person tagette; 19.07.2015