Simple Navbar class for edc
Include edc_navbar.apps.AppConfig in INSTALLED_APPS.
Navbars are declared in your apps navbars.py and will be autodiscovered by edc_navbar and stored in the site global site_navbars.
By default, a basic navbar is added to the site global. For it to load you need to define the named urls for home_url, administration_url and logout_url in your main project urls.py. The named urls defined in the default navbar do not include a namespace.
For example, in the "main" project app urls.py:
urlpatterns = [
...
path('login', LoginView.as_view(), name='login_url'),
path('logout', LogoutView.as_view(
pattern_name='login_url'), name='logout_url'),
path('admininistration/', AdministrationView.as_view(),
name='administration_url'),
path('', HomeView.as_view(manual_revision='1.0'), name='home_url'),
...
]You can change the default navbar to another navbar by setting settings.DEFAULT_NAVBAR to the name of your custom navbar. You will need to declare and register your custom navbar manually. See edc_navbar.navbars.
The default template for NavbarItem is navbar_item.html. You can declare a custom template on the NavbarItem.
For example, in base.html:
{% load edc_dashboard_extras %}
...
{% show_edc_navbar %}
...The rendered html comes from edc_navbar.html
A navbar is defined and registered to the site global in the navbars.py module of each app that needs a navbar.
An example navbars.py:
from edc_navbar import NavbarItem, site_navbars, Navbar
url_namespace = 'edc_pharmacy_dashboard'
# instantiate a Navbar
pharmacy_dashboard = Navbar(name='pharmacy_dashboard')
# add items to the navbar
pharmacy_dashboard.register(
NavbarItem(
name='prescribe',
title='Prescribe',
label='prescribe',
glyphicon='glyphicon-edit',
url_name=f'{url_namespace}:prescribe_listboard_url'))
pharmacy_dashboard.register(
NavbarItem(
name='dispense',
title='Dispense',
label='dispense',
glyphicon='glyphicon-share',
url_name=f'{url_namespace}:dispense_listboard_url'))
# register the navbar to the site
site_navbars.register(pharmacy_dashboard)Next, add NavbarViewMixin to your views and set the navbar by name. The navbar will be rendered to string and added to the view context.
from edc_navbar import NavbarViewMixin
class HomeView(EdcViewMixin, NavbarViewMixin, TemplateView):
navbar_name = 'pharmacy_dashboard'
navbar_selected_item = 'prescribe'The default template for NavbarItem is navbar_item.html. You can declare a custom template on the NavbarItem.
Each NavbarItem can declare a Django permissions codename. The codename will be associated with model edc_navbar.navbar.
For example:
from edc_navbar import NavbarItem, site_navbars, Navbar
url_namespace = 'edc_pharmacy_dashboard'
# instantiate a Navbar
pharmacy_dashboard = Navbar(name='pharmacy_dashboard')
# add items to the navbar
pharmacy_dashboard.register(
NavbarItem(
name='prescribe',
title='Prescribe',
label='prescribe',
glyphicon='glyphicon-edit',
permissions_codename='nav_pharmacy_prescribe',
url_name=f'{url_namespace}:prescribe_listboard_url'))
pharmacy_dashboard.register(
NavbarItem(
name='dispense',
title='Dispense',
label='dispense',
glyphicon='glyphicon-share',
permissions_codename='nav_pharmacy_dispense',
url_name=f'{url_namespace}:dispense_listboard_url'))
# register the navbar to the site
site_navbars.register(pharmacy_dashboard)From the above, you can reference edc_navbar.nav_pharmacy_prescribe and edc_navbar.nav_pharmacy_dispense in your code.
{% if perms.edc_navbar.nav_pharmacy_dispense %}
href="some_url"
{% else%}
disabled
{% endif %}See also: