Как хранить урлы меню навигации в базе данных?

Я работаю над своим первым приложением на 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 %}

Вернуться на верх