- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Flask 服务器中使用 Dash 应用程序。
这就是我实例化 Flask 服务器的方式:
from flask import Flask, redirect
server = Flask(__name__, template_folder="../frontend/templates",
instance_relative_config=True)
这是 create_dash_app 函数:
import dash
def create_dash_app(server):
dash_app = dash.Dash(
__name__,
server=server,
url_base_pathname='/dash/',
external_stylesheets=['https://codepen.io/chriddyp/pen/bWLwgP.css']
)
dash_app.config['suppress_callback_exceptions'] = True
dash_app.layout = html.H3("Lorem ipsum... ")
return dash_app.server
在我的一个服务器路由中,我有以下内容:
@server.route('/filter')
def filter_stuff():
<some code>
create_dash_app()
redirect("/dash")
重点是,对于我的用例,用户可能希望查看 dash 应用程序,返回到过滤器路由,应用一些过滤器并检查 dash 应用程序中的更改。不幸的是,当我这样做时,我得到以下信息:
> AssertionError: A name collision occurred between blueprints
> <flask.blueprints.Blueprint object at 0x11905bcd0> and
> <flask.blueprints.Blueprint object at 0x118acbad0>. Both share the
> same name "_dash_dash_assets". Blueprints that are created on the fly
> need unique names.
鉴于我对 Flask 和 Dash 的经验不多,我想我缺少的是一些微不足道的东西。如果您可能需要其他信息,请告诉我。
编辑:我找到了一个让我感到羞愧的解决方法第二次编辑:包括一个回调示例
from flask import Flask, redirect
from multiprocessing import Value
counter = Value('i', 0)
server = Flask(__name__, template_folder="../frontend/templates",
instance_relative_config=True)
@server.route('/filter')
def filter_stuff():
with counter.get_lock():
counter.value += 1
out = counter.value
<some code>
dash_address = "/dash"+str(out)+"/"
create_dash_app(server, dash_address, nodes_cyto, edges_cyto)
redirect(dash_address)
import dash
from dash_core_components import *
from dash.dependencies import Input, Output
def create_dash_app(server, dash_address, nodes_cyto, edges_cyto):
dash_app = dash.Dash(
__name__,
server=server,
url_base_pathname=dash_address,
external_stylesheets=['https://codepen.io/chriddyp/pen/bWLwgP.css']
)
dash_app.config['suppress_callback_exceptions'] = True
dash_app.layout = html.Div([
cyto.Cytoscape(
id='cytoscape_net',
elements=nodes_cyto + edges_cyto,
zoomingEnabled=True,
zoom=0.8,
layout={'name': 'klay'},
style={'width': '80%', 'height': '700px', 'float': 'left'},
stylesheet=my_stylesheet
),
dcc.Tabs([
dcc.Tab(label='Dettaglio Interazioni', style=tab_style, selected_style=tab_selected_style, children=[
dash_table.DataTable(
id='edge-table',
columns=[],
style_header={
'backgroundColor': 'rgb(230, 230, 230)',
'fontWeight': 'bold'
},
fixed_rows={'headers': True},
style_data = {'whiteSpace': 'normal',
'height': 'auto',
'lineHeight': '15px'},
style_data_conditional=[
{
'if': {'row_index': 'odd'},
'backgroundColor': 'rgb(248, 248, 248)'
},
{
'if': {'column_id': 'Info'},
'textAlign': 'right'
}
],
style_cell={
'height': 'auto',
'minWidth': '180px', 'width': '180px', 'maxWidth': '180px',
'whiteSpace': 'normal',
'fontSize':14
},
style_table={'width': '50%',
'overflowY': 'auto',
'overflowX': 'auto'},
data=[])
])
init_callbacks(dash_app)
return dash_app.server
def init_callbacks(app):
@app.callback([Output('edge-table', 'data'),
Output('edge-table', 'columns')],
[Input('cytoscape_net', 'tapEdgeData')])
def populateEdgeTable(data):
json_data = json.loads(json.dumps(data, indent=2))
if data is None:
return [], []
dict_data = dict(json_data)
dict_data_1 = {your_key.replace("_1", ""): dict_data[your_key] for your_key in
[j for j in dict_data.keys() if "_1" in j] + ["tipo_interazione"]}
dict_data_2 = {your_key.replace("_2", ""): dict_data[your_key] for your_key in
[j for j in dict_data.keys() if "_2" in j] + ["tipo_interazione"]}
columns = [{'name': 'Info', 'id': 'Info'},
{'name': 'Source', 'id': 'Source'},
{'name': 'Target', 'id': 'Target'}]
return pd.DataFrame({'Info': list(dict_data_1.keys()),
'Source': list(dict_data_1.values()),
'Target': list(dict_data_2.values())}).to_dict(orient='records'), columns
如您所见,我每次都使用计数器重定向到新页面。我想知道是否有人会死于阅读此文。
谢谢
最佳答案
虽然 Dash 应用程序可以动态实例化,但根据我的经验,这是一种应该避免的设计模式。关于这个问题中针对的具体用例,我会考虑两个主要途径,
最简单和连贯的解决方案是将过滤器作为 Dash 应用程序本身的一部分。使用这种方法,可以通过将过滤器值作为 State
参数传递给页面呈现回调来将过滤器应用于其他页面。它们可以直接传递(如果没有太多过滤器)或通过例如聚合一个 Store
组件。这是一个代码片段来说明这个概念,
@app.callback(Output("store", "data"), [Input("filter{}".format(i), "value") for i in range(100)])
def aggregate_filters(*args):
return list(args)
@app.callback(Output("page", "children"), [Input(...)], [State("store", "data")])
def render_page(*args, filters):
...
如果无法将过滤器页面本身移植到 Dash,您可以序列化过滤器选择并将它们传递给 Dash 应用程序。可能是例如通过 URL(如果没有太多选择)或 session 变量。这是后者的草图,
from flask import session, redirect
...
@server.route('/filter')
def filter_stuff():
# This assignment might happen from JavaScript depending on you app structure
session["filters"] = ...
redirect(dash_address)
...
@app.callback(Output("page", "children"), [Input(...)])
def render_page(*args, filters):
filters = session["filters"]
...
此方法的其他变体包括保存选择服务器端(例如,在文件或内存缓存中,如 Redis),由一个键标识,例如一个 uuid,然后通过 URL 传递给 Dash 应用程序。
关于您目前使用的 hack,除了不太漂亮之外,我担心它会耗尽服务器资源,因为每次过滤器选择更改时您都在有效地创建一个新的 Dash 应用程序。
关于python - 服务于 Flask 服务器的 Dash 应用程序内部服务器错误 : A name collision occurred between blueprints,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61921054/
我用 Java 创建了一个简单的 2d 物理引擎,它使用圆形射弹和直墙。目前,每一帧,每个射弹的位置都会提前velocity * (1/fps) .速度随后更新,每帧一次。碰撞检测使用先前和当前位置以
我有一个 CollisionHandler 类,它有 OnCollisionEnter 方法。游戏中的每个 collideable 实体都有 CollisionHandler 作为组件。因此,当 2
我目前正在编写像 Breakout 这样的游戏,我想知道如何正确地将球从表面上弹开。 我采用了将速度旋转 90 度的幼稚方式,即: [vx, vy] -> [-vy, vx] 哪个(不出所料)效果不佳
这个问题一定存在于某个地方,但我不确定它会被称为什么。 在高度图之后,存在直角三角形地形。每个三角形的每个点都从高度图中获取其高度 (y)。 如果角色位于一组特定的坐标,您可以计算出他们在哪个三角形中
我正在做一个2D滚动大理石的项目。我可以检测出大理石何时撞到了盒子的角落,但是我无法弄清楚大理石在撞到角落时应该有什么行为。我需要弄清楚如何重新放置球,使其不与盒子重叠。通过框到框的碰撞,就像将框彼此
是否可以为实体定义更准确的自定义形状碰撞框而不是矩形?请让我知道是否可行以及如何实现? 最佳答案 当然可以,并且有多种可能的解决方案: Box2D: 是一个很棒的物理引擎,可作为 ImpactJS 的
我正在开发一款 2D 游戏,其中包含高速射弹,这些射弹会撞击高速(并且可能旋转得非常快)的多边形目标对象。我一直在试验和寻找适合我的强大碰撞检测算法。 如果快速旋转不是一个因素(即 0 或慢速旋转),
我正在制作一款平台游戏,其中有玩家和一些 Prop 。为了检查碰撞,我使用了 matterjs collisionactive 函数: this.matter.world.on("collisiona
我已经习惯于使用矩形进行碰撞检测,现在我有点难住了。我正在处理类似菱形的形状,在过去的几个小时里,我一直在试图找出如何检查碰撞。 我尝试检查第一个对象的四个点是否在第二个对象的点内,但这只是一个框(我
最初,两个半径为 R1 和 R2 的非接触球体处于静止状态。 然后在时间 = 0 时分别给它们两个加速度 a1 和 a2。查明他们是否会接触。它们的初始位置分别表示为 (x1,y1,z1) 和 (x2
我目前正在学习使用 LWJGL 和 OpenGL 的 ThinMatrix 3d 游戏开发教程。我正在尝试在我的游戏中实现碰撞检测。我已经准备好检测 AABB 与 AABB 碰撞的代码,但似乎无法弄清
如何在 3D 空间中有效地找到无限线和 AABB 之间的最近点? 我有一个简单的解决方案,它涉及找到距离 AABB 的所有 12 个边缘最近的点,并选择最接近的对,这很有效,但性能不是很好。我的用例需
凹面多边形之间有什么好的检测算法吗?我将不胜感激,到目前为止,我只找到了用于检测凸多边形之间的算法。 最佳答案 您可能会发现this论文很有趣。 关于collision-detection - 凹多边
我在哪里可以阅读更多关于游戏或具有交互性的应用程序的基本 2d 碰撞检测的信息? 编辑:Canvas 游戏的 javascript 怎么样? 最佳答案 要知道的最重要的定理是分离轴定理 (SAT)。基
我最近遇到了 this video并想实现类似的东西。基本方法很明确:我必须对图像进行阈值处理并检查虚拟对象是否与剩余前景发生碰撞。 我不想自己实现物理,而是想使用像 Box2D 这样的引擎。但是,如
我似乎无法让海龟在相互接触时死亡。只有当他们在同一个补丁上时,我才能杀死他们。有这样的功能吗? to killturtles if contact? [die] end 最佳答案 没有,但假设你的乌龟
OBB具有位置(x,y),速度(x,y)和方向(Matrix)。给定定期更新,OBB必须彼此冲突,返回被认为成功的举动的一部分。 我已经看过GPWiki上的Polygon测试-http://gpwik
你究竟是如何实现碰撞检测的?所涉及的费用是多少?不同的平台(c/c++、java、cocoa/iphone、flash、directX)对计算碰撞有不同的优化。最后,是否有库可以为我做这件事,或者我可
我正在尝试在我的物理引擎中赋予形状圆度/曲率。 我知道在数学上定义曲线的各种方法;例如贝塞尔曲线、椭圆等。但是我不确定哪种方法最适合在我的物理引擎中使用,因为必须考虑每种方法的速度、构造可行性和灵 a
我希望您对这个问题提出建议... 为简单起见,我将只考虑 x 轴。 对位置 10 的对象进行成像,其宽度也是 10 个单位,每秒向前移动 100 个单位,并且由于低帧,每次更新时它应该移动 80 个单
我是一名优秀的程序员,十分优秀!