2014-01-15 4 views
0

Как создать меню в Django, которое находится в базовом шаблоне, и получить его содержимое из базы данных? Мой базовый шаблон:Как создать меню в базовом шаблоне (Django)?

<!DOCTYPE html> 
<html> 
    <head> 
     <title>{% block title %}My page{% endblock %}</title> 
     <link rel="stylesheet" href="{{ STATIC_URL }}css/uikit.min.css" /> 
     <script src="{{ STATIC_URL }}js/jquery.min.js"></script> 
     <script src="{{ STATIC_URL }}js/uikit.min.js"></script> 
    </head> 
    <body> 
     {% block content %} 
     {% endblock %} 
    </body> 
</html> 

PS: Извините за мой английский, I'am полируют.

+0

Не беспокойтесь о своем английском. Просто дайте немного больше информации. Что вы имеете в виду, создайте меню? Это может означать HTML-шаблон среди любой другой вещи, о которой я могу думать (некоторый проект для создания меню) и т. Д. Есть несколько проектов, которые помогают создавать меню сайта. Или вы можете просто создать его вручную, если у вас есть HTML. –

ответ

2

Назад Когда-то у меня был тот же вопрос, я закончил создание Mixin и ввел там меню, более конкретное (это в том случае, если вы используете Class Based View ..., который вы должны ...):

class MenuMixin(object): 
    def get_context_data(self, **kwargs): 
     context = super(MenuMixin, self).get_context_data(**kwargs) 
     context['menu'] = MenuModel.objects.all() 
     return context 


class MyListView(MenuMixin, ListView): 
    ... 

Затем в шаблонах можно просто:

{% include "partials/menu.html" %} 

И внутри Partials/menu.html:

{% for item in menu %} 
    <a href="{{ item.link }}">{{ item.name }}</a> 
{% empty %} 
    Do something for empty... 
{% endfor %} 
1

Возможно, вас заинтересовали django-simple-menu.

Затем адаптировать его к прецеденту, вы можете просто прочитать элементы базы данных из внутри menus.py как так (имейте в виду, что это просто псевдо-код):

# menus.py 

items = Menu.objects.all() 

for item in items: 
    Menu.add_item("main", MenuItem(item.name, item.url), 
          weight=10, 
          icon=item.name.lower())) 

Другие решения, которые вы можете думать, состоит в том, чтобы создать контекстный процессор или пользовательский тег, но это может быть сложно определить самостоятельно, если вы менее опытны, а структура меню сложнее (подменю).

Смежные вопросы