Da sh Bootstrap Компоненты NavLink не вызывают обратный вызов - PullRequest
1 голос
/ 28 февраля 2020

Я создаю многостраничное приложение и создал навигационную панель со ссылками на разные страницы (URL), которая с недавних пор загадочным образом перестала работать. Я попытался вернуть весь код до последнего известного исправного состояния, и это не устранило проблему. В настоящее время это не работает только на моей машине для разработки, и работающее приложение все еще работает, но из-за этой проблемы я не могу публиковать sh новые версии. Я включил фрагменты кода ниже для всего соответствующего кода и был бы признателен за sh внимание на эту проблему, спасибо.

Возможно, стоит отметить, что если я изменю db c .NavLink на db c .Link, все работает нормально, но не отображается правильно или не имеет активной кнопки, когда отображается на странице, поэтому это не нужный вариант.

Вот мои версии

dash-bootstrap-components 0.7.1
dash-core-components 1.8.0
dash-html-components 1.0.2

app.py

import dash_bootstrap_components as dbc
import dash_core_components as dcc
import dash_html_components as html

from server import app

app.layout = htm.Div([
    html.Link(rel='shortcut icon', href='assets/images/favicon/ico'),
    dcc.Store(id='session-store', storage_type='session'),
    dcc.Location(id='url', refresh=False),
    html.Nav(id='navbar-container'),
    html.Div(id='page-content')
])

navbar.py

import dash_bootstrap_components as dbc
import dash_core_components as dcc
import dash_html_components as html

def navbar():
    layout = html.Nav([
        dbc.Nav([
            dbc.NavItem(dbc.NavLink('Home', id='home-link', href='/')),
            dbc.NavItem(dbc.NavLink('Employees', id='employee-link', href='/employees')),
            dbc.NavItem(dbc.NavLink('Programs', id='programs-link', href='/programs')),
            dbc.NavItem(dbc.NavLink('Capacity', id='capacity-link', href='/capacity'))
            ],
            pills=True,
            id='navbar')
    ])

callbacks.py

from dash.dependencies import Output, Input, State
from pages import home, employees, programs, capacity
from assets.navbar import navbar

page_list = '', 'employees', 'programs', 'capacity']


@app.callback(Output('page-content', 'children'),
             [Input('url', 'pathname')],
             [State('session-store', 'data')])
def display_page(pathname, data):
    if pathname == '/':
        return home.home_page_layout(data)
    if pathname == '/employees':
        return employees.employee_page_layout(data)
    if pathname == '/programs':
        return programs.program_page_layout()
    if pathname == '/capacity':
        return capacity.capacity_page_layout()

@app.callback([Output('navbar-container', 'children'),
               Output('home-link', 'active'),
               Output('employees-link', 'active'),
               Output('programs-link', 'active'),
               Output('capacity-link', 'active')],
              [Input('url', 'pathname')],
              [State('navbar-container', 'children')])
def navbar_state(pathanem, data):
    active_link = ([pathname == f'/{i}' for i in page_list])
    return navbar(data), active_link[0], active_link[1], active_link[2], active_link[3]

1 Ответ

0 голосов
/ 28 февраля 2020

После просмотра доступных аргументов для элемента db c .NavLink выясняется, что по какой-то причине ему больше не удалось автоматически согласовать тип ссылки. Я добавил аргумент external_link=True к самим ссылкам, и все снова заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...