Merge nav into base template

{% block %} defined in nav template cannot be overriden by child
templates from base. This is a limitation in jinja.

Merge nav into base template so jinja blocks so no {% include %} is used
and these blocks can be overriden by child templates (commands, images,
dashboard...)

Avoid using request.endpoint to determine active nav item, decoupling
endpoint names from navigation. Instead use child templates to override
jinja blocks.

[1] https://stackoverflow.com/q/40537752
    https://stackoverflow.com/a/40562662
    https://github.com/pallets/jinja/issues/243
multi-ogserver
Jose M. Guisado 2022-02-22 12:34:03 +01:00
parent 5d9ad78ed3
commit 07b69dab90
4 changed files with 50 additions and 50 deletions

View File

@ -15,8 +15,53 @@
</head>
<body>
<div class="main d-flex flex-column align-items-stretch h-100">
{% include 'nav.html' %}
{% block nav %}{% endblock %}
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="#">OpenGnsys</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
{% if current_user.is_authenticated %}
<li class="nav-item {% block nav_dashboard%}{% endblock %}">
<a class="nav-link" href="{{ url_for('index') }}">{{ _('Dashboard') }}<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item {% block nav_scopes%}{% endblock %}">
<a class="nav-link" href="{{ url_for('scopes') }}">{{ _('Scopes') }}</a>
</li>
<li class="nav-item {% block nav_commands%}{% endblock %}">
<a class="nav-link" href="{{ url_for('commands') }}">{{ _('Commands') }}</a>
</li>
<li class="nav-item {% block nav_images%}{% endblock %}">
<a class="nav-link" href="{{ url_for('images') }}">{{ _('Images') }}</a>
</li>
<li class="nav-item {% if request.endpoint == "tasks" %}active{% endif %}">
<a class="nav-link" href="#">{{ _('Tasks') }}</a>
</li>
<li class="nav-item {% if request.endpoint == "schedule" %}active{% endif %}">
<a class="nav-link" href="#">{{ _('Schedule') }}</a>
</li>
{% endif %}
</ul>
<ul class="nav navbar-nav navbar-right">
{% if current_user.is_authenticated %}
<li class="nav-item">
<a class="btn btn-danger" href="{{ url_for('logout') }}">{{ _('Logout') }}</a>
</li>
{% else %}
<li class="nav-item">
<a class="btn btn-primary" href="{{ url_for('login') }}">{{ _('Login') }}</a>
</li>
{% endif %}
</ul>
</div>
</nav>
<div class="container-fluid flex-grow-1">
{% block container %}
<div class="row h-100">

View File

@ -1,7 +1,7 @@
{% extends 'base.html' %}
{% import "macros.html" as macros %}
{% block nav_scopes %}active{% endblock %}
{% block nav_commands %}active{% endblock %}
{% block container %}
<form id="scopesForm">

View File

@ -1,5 +1,7 @@
{% extends 'base.html' %}
{% block nav_dashboard %}active{% endblock %}
{% block content %}
<div class="row">
<!-- connected clients -->

View File

@ -1,47 +0,0 @@
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<a class="navbar-brand" href="#">OpenGnsys</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
{% if current_user.is_authenticated %}
<li class="nav-item {% if request.endpoint == "index" %}active{% endif %}">
<a class="nav-link" href="{{ url_for('index') }}">{{ _('Dashboard') }}<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item {% if request.endpoint == "scopes" %}active{% endif %}">
<a class="nav-link" href="{{ url_for('scopes') }}">{{ _('Scopes') }}</a>
</li>
<li class="nav-item {% if request.endpoint == "commands" %}active{% endif %}">
<a class="nav-link" href="{{ url_for('commands') }}">{{ _('Commands') }}</a>
</li>
<li class="nav-item {% if request.endpoint == "images" %}active{% endif %}">
<a class="nav-link" href="{{ url_for('images') }}">{{ _('Images') }}</a>
</li>
<li class="nav-item {% if request.endpoint == "tasks" %}active{% endif %}">
<a class="nav-link" href="#">{{ _('Tasks') }}</a>
</li>
<li class="nav-item {% if request.endpoint == "schedule" %}active{% endif %}">
<a class="nav-link" href="#">{{ _('Schedule') }}</a>
</li>
{% endif %}
</ul>
<ul class="nav navbar-nav navbar-right">
{% if current_user.is_authenticated %}
<li class="nav-item">
<a class="btn btn-danger" href="{{ url_for('logout') }}">{{ _('Logout') }}</a>
</li>
{% else %}
<li class="nav-item">
<a class="btn btn-primary" href="{{ url_for('login') }}">{{ _('Login') }}</a>
</li>
{% endif %}
</ul>
</div>
</nav>