Мне хотелось бы, чтобы мое приложение Dash правильно отображалось в Slack в зависимости от того, какой контент оно отображает при копировании ссылки. Вот небольшой пример:
из тире импортировать Dash, html, dcc, обратный вызов, вывод, ввод импортировать панд как pd импортироватьplotly.express как px приложение = Dash(__name__) сервер = приложение.сервер защита return_data_up(): data = pd.DataFrame({"x": [1, 2, 3, 4, 5], "y": [1, 2, 3, 4, 5]}) возвращать данные защита return_data_down(): data = pd.DataFrame({"x": [1, 2, 3, 4, 5], "y": [5, 4, 3, 2, 1]}) возвращать данные app.layout = html.Div( [ html.Div(дети="Мое первое приложение с данными и графиком"), dcc.RadioItems( варианты=[ "Вверх!", "Вниз!", ], value="Вверх!", id="график вверх или вниз", ), dcc.Graph(figure={}, id="my_figure"), ] ) @перезвонить( Выход(comComponent_id="my_figure", компонент_свойство="фигура"), Input(comComponent_id="график вверх или вниз", компонент_свойство="значение"), ) защита update_graph(up_or_down): if up_or_down == "Вверх!": return px.line(return_data_up(), x="x", y="y") elif up_or_down == "Вниз!": return px.line(return_data_down(), x="x", y="y") еще: возврат Нет если __name__ == "__main__": app.run(отладка=Истина) В этом приложении есть два переключателя: Вверх! и вниз! Когда пользователь меняет выбор, график тоже обновляется.
Чего хотелось добиться: при копировании ссылки в Slack хотелось бы, чтобы она разворачивалась исходя из содержимого страницы в момент копирования ссылки. Для этого мне понадобятся следующие теги meta в :
мое приложение Dash Хотя, в конечном итоге, мне бы хотелось, чтобы большинство этих тегов обновлялись динамически, для примера я рад, если заголовок изменится только в зависимости от того, какой переключатель выбран при копировании ссылки. Т.е. когда вверх! выбрано, оно должно быть: , в противном случае: Что я пробовал до сих пор, ничего из этого не сработало (но, вероятно, потому что у меня недостаточно знаний HTML/js):
[*]переопределение класса Dash для создания пользовательской функции interpolate_index, т.е.:
класс CustomDash(Dash): def interpolate_index(self, **kwargs): [...] Здесь я не знал, как передавать в функцию аргументы (кварги). Мне удалось добавить статические метатеги. (источник)
[*]
app = Dash(__name__, Meta_tags=meta_tags) Здесь я также смог добавлять только статические метатеги, но не мог обновлять их во время работы приложения (источник)
[*]
Я добавил компонент html.Meta в app.layout и установил обратный вызов для изменения его содержимого. Это вызвало ошибку. (источник) Судя по документации, я не думаю, что это сработает:
ВНИМАНИЕ: включен для полноты, но обычно он не будет вести себя должным образом, поскольку теги должны представлять собой статическое HTML-содержимое в документа. Компоненты Dash представляют собой динамический контент.
Что я не смог реализовать, но мог бы стать шагом вперед:
[*]Добавление собственного CSS и JavaScript в приложения Dash (источник)
Я не уверен, что это правильный путь, но решил поделиться тем, что я попробовал. Любая помощь приветствуется. Большое спасибо