make menu work

This commit is contained in:
bkfox 2016-05-26 22:12:29 +02:00
parent 1e571960d0
commit 7c89f84b34
3 changed files with 43 additions and 46 deletions

View File

@ -29,6 +29,7 @@ class Section(View):
Attributes:
* template_name: template to use for rendering
* tag: container's tags
* name: set name/id of the section container
* css_class: css classes of the container
* attr: HTML attributes of the container
* hide_empty: if true, section is not rendered when content is empty
@ -41,12 +42,13 @@ class Section(View):
* object: (can be persistent) related object
"""
template_name = 'aircox/cms/content_object.html'
template_name = 'aircox/cms/section.html'
tag = 'div'
name = ''
css_class = ''
attrs = ''
hide_empty = False
attrs = None
# hide_empty = False
title = ''
header = ''
footer = ''
@ -54,7 +56,12 @@ class Section(View):
def __init__ (self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.css_class += ' section'
self.css_class = 'section' if not self.css_class else ' section'
if not self.attrs:
self.attrs = {}
if self.name:
self.attrs['name'] = self.name
self.attrs['id'] = self.name
def get_content(self):
return ''
@ -75,13 +82,10 @@ class Section(View):
def get(self, request, object=None, **kwargs):
if not self.object:
self.object = object
self.request = request
self.kwargs = kwargs
context = self.get_context_data()
# if not context['content'] and self.hide_empty:
# return ''
return render_to_string(self.template_name, context, request=request)
@ -238,3 +242,34 @@ class Comments(List):
})
return context
class Menu(Section):
template_name = 'aircox/cms/section.html'
tag = 'nav'
classes = ''
attrs = ''
name = ''
enabled = True
position = '' # top, left, bottom, right, header, footer, page_top, page_bottom
sections = None
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.css_class += ' menu menu_{}'.format(self.name or self.position)
if not self.attrs:
self.attrs = {}
def get_context_data(self):
return {
'tag': self.tag,
'css_class': self.css_class,
'attrs': self.attrs,
'content': ''.join([
section.get(request=self.request, object=self.object)
for section in self.sections
])
}

View File

@ -1,6 +1,6 @@
<{{ tag }} class="{{ css_class }}"
{% for k, v in list.attrs.items %}
{% for k, v in attrs.items %}
{{ k }} = "{{ v|addslashes }}"
{% endfor %} >

View File

@ -176,41 +176,3 @@ class PostDetailView(DetailView, PostBaseView):
return self.get(request, *args, **kwargs)
class Menu(View):
template_name = 'aircox/cms/section.html'
tag = 'nav'
classes = ''
attrs = ''
name = ''
enabled = True
position = '' # top, left, bottom, right, header, footer, page_top, page_bottom
sections = None
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.classes += ' menu menu_{}'.format(self.name or self.position)
if not self.attrs:
self.attrs = {}
if self.name:
self.attrs['name'] = self.name
self.attrs['id'] = self.name
def get_context_data(self, request, object = None, **kwargs):
kwargs['object'] = object
return {
'tag': self.tag,
'classes': self.classes,
'attrs': self.attrs,
'content': ''.join([
section.get(request, **kwargs)
for section in self.sections
])
}
def get(self, request, object = None, **kwargs):
self.request = request
context = self.get_context_data(request, object, **kwargs)
return render_to_string(self.template_name, context)