Как скачать файл с plotly-da sh в многостраничном приложении? - PullRequest
1 голос
/ 09 апреля 2020

Я уже знаю о следующем подходе (ссылка здесь ):

server = Flask(__name__)
app = dash.Dash(server=server)


@server.route("/download/<path:path>")
def download(path):
    """Serve a file from the upload directory."""
    return send_from_directory(UPLOAD_DIRECTORY, path, as_attachment=True)

Но проблема в том, что когда я использую многостраничный подход, подобный предложенному из Plotly (ссылка здесь (ниже «Структурирование многостраничного приложения» - index.py)):

    app.layout = html.Div([
    dcc.Location(id='url', refresh=False),
    html.Div(id='page-content')
])


@app.callback(Output('page-content', 'children'),
              [Input('url', 'pathname')])
def display_page(pathname):
    if pathname == '/apps/app1':
        return app1.layout
    elif pathname == '/apps/app2':
        return app2.layout
    else:
        return '404'

Я не могу использовать server.route, потому что он будет пойман показанным callback выше.

Каков наилучший способ сделать файлы загружаемыми?

1 Ответ

0 голосов
/ 09 апреля 2020

Хорошо, я решил это сейчас.

В документации написано:

Компонент dcc.Location представляет местоположение или адресную строку в Ваш веб-браузер.

Поэтому я использовал элемент html .A с опцией загрузки. Как указано здесь , download

Предлагает пользователю сохранить связанный URL-адрес вместо перехода к нему.

Это означает, что когда пользователь нажимает на ссылку, она не меняет адресную строку. Следовательно, callback из display_page(pathname) не вызывается, и ссылка направляется на download(path) -метод через оператор @server.route.

...