HTMX

  1. Download htmx.min.js from it's official site and place it in static/js directory, and install django_htmx.
  2. add htmx.min.js to html header, or use templates available in stem 4 and 5.
<script type="text/javascript" src="{% static 'js/htmx.min.js' %}" defer></script>
  1. in each Django View using html add base_template variable.
context["base_template"] = "partial.html" if request.htmx else "base.html"
  1. Create base.html for base of your template including html header, and body containing navigation, main content, and footer.
{% load static %}

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8">
		<title>{% block title %}ElevateNLP{% endblock %}</title>
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<meta name="apple-mobile-web-app-capable" content="yes">
		<meta name="description" content="">
		<meta name="author" content="">

		<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
		<link href="{% static 'css/fontawesome.min.css' %}" rel="stylesheet">
		<link href="{% static 'css/style.css' %}" rel="stylesheet">

		<script type="text/javascript" src="{% static 'js/bootstrap.bundle.min.js' %}" defer></script>
		<script type="text/javascript" src="{% static 'js/main.js' %}" defer></script>
		<script type="text/javascript" src="{% static 'js/htmx.min.js' %}" defer></script>
  		<meta name="htmx-config" content='{"refreshOnHistoryMiss":"true"}'>

		<!-- Fav and touch icons -->
		<link rel="shortcut icon" href="{% static 'image/favicon.ico'%}">

		{% block header %}
		{% endblock %}
	</head>
	<body>
		<!-- Navigation -->
		{% include 'navbar.html' %}


		<!-- Body Content -->
		<main class="container" id="main-container">
			{% block content %}
			{% endblock %}
		</main>


		<!-- Footer -->
		<footer class="footer mt-auto py-3 bg-light">
			<div class="container">
				<span class="text-center text-muted">&copy; 2019 <a href="http://TheRational.ist/">Tohid</a>.</span>
			</div>
		</footer>

		{% block footer %}
		{% endblock %}
	</body>
</html>

in this code following is essential:

<script type="text/javascript" src="{% static 'js/htmx.min.js' %}" defer></script>
<meta name="htmx-config" content='{"refreshOnHistoryMiss":"true"}'>
  1. Create partial.html to generate partial html.
<title hx-swap-oob="innerHTML:title">{% block title %}{% endblock %}</title>

{% block header %}{% endblock %}
{% block content %}{% endblock %}

This code will allow dynamic changing of header and content blocks. as well as updating page title updates.

  1. To extend each template using htmx using extends command.
{% extends base_template %}
{% load static %}
{% load i18n %}

{% block title %}{% trans "Home" %}{% endblock %}

{% block content %}
	<div class="row">
	</div>
{% endblock %}
  1. navbar.html template may look like this:
{% load static %}

<nav class="navbar navbar-expand-md navbar-dark bg-dark">
	<div class="container-fluid">
		<a hx-swap="innerHTML show:window:top" hx-target="#main-container" hx-push-url="true" hx-boost="true" hx-indicator="#navbar-indicator" class="navbar-brand" href="#home">Project Title</a>
		<div id="navbar-indicator" class="htmx-indicator spinner-border spinner-border-sm text-light" role="status"><span class="visually-hidden">Loading...</span></div>
		<button type="button" class="navbar-toggler" data-toggle="collapse" data-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation"><i class="fa fa-bars" aria-hidden="true"></i></button>
		<div id="navbar" class="collapse navbar-collapse">
			<ul hx-swap="innerHTML show:window:top" hx-target="#main-container" hx-push-url="true" hx-boost="true" hx-indicator="#navbar-indicator" class="navbar-nav me-auto mb-2 mb-lg-0">
				<li class="nav-item dropdown">
					<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">First Menu</a>
					<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
						<li><h6 class="dropdown-header">Dropdown Header</h6></li>
						<li><a class="dropdown-item" href="#link"><i class="fa fa-book"></i> Menu Item</a></li>
						<li><hr class="dropdown-divider"></li>
						<li><h6 class="dropdown-header">Dropdown Header</h6></li>
						<li><a class="dropdown-item" href="#link"><i class="fa fa-coins"></i>Menu Item</a></li>
					</ul>
				</li>
			</ul>

			{% if request.user.is_authenticated %}
				<ul class="navbar-nav">
					<li class="nav-item dropdown">
						<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">
							<i class="fa fa-user"></i>
							{% if request.user.get_full_name %}{{ request.user.get_full_name }}{% else %}{{ request.user.username }}{% endif %}
						</a>
						<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
							{% if request.user.is_superuser %}
								<div class="dropdown-divider" role="separator"></div>
								<a class="dropdown-item" href="{% url 'admin:index' %}">Admin</a>
							{%  endif %}
							<div class="dropdown-divider" role="separator"></div>
							<a hx-swap="innerHTML show:window:top" hx-target="#main-container" hx-push-url="true" hx-boost="true" hx-indicator="#navbar-indicator" class="dropdown-item" href="{% url 'account:profile' user %}">Profile</a>
							<a hx-swap="innerHTML show:window:top" hx-target="#main-container" hx-push-url="true" hx-boost="true" hx-indicator="#navbar-indicator" class="dropdown-item" href="{% url 'account:user_settings_edit' user %}">Settings</a>
							<a class="dropdown-item" href="#signout">Logout</a>
						</ul>
					</li>
				</ul>
			{% else %}
				<ul hx-target="#user-modal-container" hx-push-url="false" hx-boost="true" hx-indicator="#navbar-indicator" class="navbar-nav">
					<li class="dropdown"><a class="nav-link" href="#signin" data-bs-toggle="modal" data-bs-target="#user-modal"><i class="fa fa-sign-in"></i> Login</a></li>
					<li class="dropdown"><a class="nav-link" href="#signup" data-bs-toggle="modal" data-bs-target="#user-modal"><i class="fa fa-user-plus"></i> Sign Up</a></li>
				</ul>
			{% endif %}
		</div>
	</div>
</nav>

Note that href="#link" properties should be edited to reflect your application's pages.