Как хранить урлы меню навигации в базе данных?
Я работаю над своим первым приложением на django, и у меня есть боковое навигационное меню, как в twitter. Чтобы избежать десятков строк в моем шаблоне вроде этой
<ul class="nav d-flex flex-column">
<li class="nav-item align-self-start rounded-pill mb-3"><li>
<li class="nav-item align-self-start rounded-pill mb-3"><li>
...
<li class="nav-item align-self-start rounded-pill mb-3"><li>
</ul>
и для расширяемости приложения я хочу хранить меню навигации в базе данных, чтобы иметь возможность циклически просматривать пункты меню
<ul class="nav d-flex flex-column">
{% for item in menu %}
<li class="nav-item align-self-start rounded-pill mb-3"><li>
{% endfor %}
</ul>
Но проблема в том, что я не могу хранить прямые url для пунктов меню в базе данных, потому что некоторые из них имеют динамические url, например, страница профиля, которая имеет шаблон 'slug:username/'. Я пробовал хранить в базе данных теги шаблонов, например
{% url 'app_name:view_name' %}
но, конечно, это не работает. Моя текущая идея состоит в том, чтобы хранить в базе данных url с пространствами имен, например, 'app_name:view_name' для статических урлов и 'request.user.get_absolute_url()' для страниц, которые имеют имя пользователя в урлах. Следующий шаг - получить QuerySet с пунктами меню из базы данных, перебрать их и преобразовать namespaces url с помощью реверса (это работает), но 'request.user.get_absolute_url()' - это просто строка, и она не работает. Затем составляем список ditcs и передаем его в context
menu = [{item1 attrs}, {item2 attrs},...,]
Существует ли лучший подход для решения моей проблемы? И, наконец, что мне делать с динамическими урлами?
Идеальный подход для достижения этого - создать файл base.html, в котором вы создадите этот элемент боковой панели навигации, а затем включить этот файл base.html на каждой странице, где вам нужна эта боковая панель.
Это пример base.html
<!DOCTYPE html>
<html>
<head>
<title>My Project</title>
</head>
<body>
<header>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">News</a></li>
</ul>
</header>
{% block content %}{% endblock content %}
</body>
</html>
Включение файла base.html в другие Html файлы
{% extends "base.html" %}
{% block content %}
<h2>Content for My App</h2>
<p>Lorem Ipsum is simply dummy text of the printing and typesetting industry..</p>
{% endblock content %}