Mam problem dotyczący wep2py i biblioteki fabularnej. Próbuję wyświetlić podstawową tabelę wykresów w web2py. Zrobiłem tabelę w moim kontrolerze Pythona z biblioteką plotly:

def test_table():
    fig = go.Figure(data=[go.Table(header=dict(values=['A Scores', 'B Scores']),
                                   cells=dict(values=[[100, 90, 80, 90], [95, 85, 75, 95]]))
                          ])
    return fig.show()
    # fig.show() gives the same result

Zgodnie z dokumentacją ploty, ten kod powinien wystarczyć do pokazania liczby. Umieściłem to w funkcji, ale myślę, że nie powinno to stanowić problemu.

Ale kiedy przekazuję tę funkcję do interfejsu użytkownika za pomocą parametru, moja przeglądarka próbuje otworzyć nową kartę, a wynik na karcie, na której działa mój web2py, pokazuje po prostu „Brak”.

0
Nynke 20 listopad 2019, 19:05

1 odpowiedź

Wykonanie return fig.show() powoduje problem. fig.show() powoduje otwarcie wykresu w przeglądarce po uruchomieniu kodu na komputerze, ale zwraca None, więc nie będzie działać na serwerze.

Sugeruję zapisanie statycznego pliku HTML, który możesz następnie obsłużyć lub możesz mieć funkcję zwracającą ciąg html. Mam nadzieję, że to pomoże

import plotly.graph_objs as go
from plotly.offline import plot

fig1 = go.Figure(data=[{'type': 'bar', 'y': [1, 3, 2]}],
                        layout={'height': 400})

fig2 = go.Figure(data = [go.Table(header=dict(values=['A Scores', 'B Scores']),
                                  cells=dict(values=[[100, 90, 80, 90], [95, 85, 75, 95]]))])

div1 = plot(fig1, output_type='div', include_plotlyjs=False)
div2 = plot(fig2, output_type='div', include_plotlyjs=False)

html = """\
<html>
    <head>
        <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
    </head>
    <body>
        {div1}
        {div2}
    </body>
</html>
""".format(div1=div1, div2=div2)

with open('multi_plot.html', 'w') as f:
    f.write(html)

enter image description here

0
Tony 21 listopad 2019, 14:34
Hmm, ale wtedy traci się interaktywność wykresów. To jest dla mnie najważniejsza rzecz, haha. Wypróbuję to!
 – 
Nynke
21 listopad 2019, 14:06
Przepraszamy, ale w swoim pytaniu nie wspomniałeś nic o interaktywności. Napisałeś listownie: „Próbuję wyświetlić podstawową tabelę Plotly”
 – 
Tony
21 listopad 2019, 14:30
Zgadza się, ponieważ pierwszym krokiem zwykle jest sprawienie, by to zadziałało. Więc jeśli nie działa to odpowiednio z jakimś podstawowym przykładem, nie ma potrzeby próbować tego z trudniejszym przykładem... Następnym razem będę dokładniejszy!
 – 
Nynke
21 listopad 2019, 16:33
Myślę, że posiadanie interaktywnej aplikacji Dash sprowadza się do uruchomienia aplikacji Dash na serwerze (lub uruchomienia jej na innym komputerze), a następnie przekierowania na ten adres, na którym działa aplikacja (ten sam serwer lub inny komputer). Ostatecznie interaktywna komunikacja jest między klient (przeglądarka) i komputer z uruchomionym „serwerem Dash” korzystającym z określonego portu, takiego jak 8050 lub coś. Tak więc serwer WSGI może po prostu przekierowywać do adresu URL, na którym działa aplikacja Dash i odgrywa rolę tylko na początku tego, co wydaje się „służyć fabule” (opcjonalnie uruchamiając samą aplikację serwera Dash).
 – 
Tony
21 listopad 2019, 16:44