Skip to content

Commit 999b0e9

Browse files
committed
Prepare for feincms3 updates
1 parent 483cfe4 commit 999b0e9

File tree

4 files changed

+59
-10
lines changed

4 files changed

+59
-10
lines changed

app/templates/base.html

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!DOCTYPE html>
2-
{% load i18n feincms3_pages %}
2+
{% load i18n menus %}
33
<html lang="{{ request.LANGUAGE_CODE }}">
44
<head>
55
<title>{% block title %}feincms3{% endblock %}</title>
@@ -90,11 +90,10 @@ <h1><a href="/{{ request.LANGUAGE_CODE }}/">feincms3</a></h1>
9090
</nav>
9191
</header>
9292

93-
{% menu "main" level=1 language_code=page.language_code as nav %}
93+
{% menus as menus %}
9494
<nav class="nav main-nav">
95-
{% for p in nav %}
96-
{% is_descendant_of page p include_self=True as active %}
97-
<a {% if active %}class="active"{% endif %}
95+
{% for p in menus.main %}
96+
<a {% if p.id in page.cte_path %}class="active"{% endif %}
9897
href="{{ p.get_absolute_url }}">{{ p }}</a>
9998
{% endfor %}
10099
</nav>
@@ -103,11 +102,9 @@ <h1><a href="/{{ request.LANGUAGE_CODE }}/">feincms3</a></h1>
103102
{% block content %}{% endblock %}
104103
</div>
105104

106-
{% menu "footer" level=1 language_code=page.language_code as nav %}
107105
<nav class="nav footer-nav">
108-
{% for p in nav %}
109-
{% is_descendant_of page p include_self=True as active %}
110-
<a {% if active %}class="active"{% endif %}
106+
{% for p in menus.footer %}
107+
<a {% if p.id in page.cte_path %}class="active"{% endif %}
111108
href="{{ p.get_absolute_url }}">{{ p }}</a>
112109
{% endfor %}
113110
</nav>

app/templatetags/__init__.py

Whitespace-only changes.

app/templatetags/menus.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
from collections import defaultdict
2+
3+
from django import template
4+
from django.db.models import Q
5+
from django.utils.translation import get_language
6+
7+
from app.pages.models import Page
8+
9+
10+
register = template.Library()
11+
12+
13+
@register.simple_tag
14+
def menus():
15+
menus = defaultdict(list)
16+
pages = Page.objects.filter(
17+
Q(is_active=True),
18+
Q(language_code=get_language()),
19+
~Q(menu=''),
20+
).extra(
21+
where=['depth BETWEEN 2 AND 3'],
22+
)
23+
for page in pages:
24+
menus[page.menu].append(page)
25+
return menus
26+
27+
28+
@register.filter
29+
def group_by_tree(iterable):
30+
"""
31+
Given a list of pages in tree order, generate pairs consisting of the
32+
parents and their descendants in a list.
33+
"""
34+
35+
parent = None
36+
children = []
37+
depth = -1
38+
39+
for element in iterable:
40+
if parent is None or element.depth == depth:
41+
if parent:
42+
yield parent, children
43+
parent = None
44+
children = []
45+
46+
parent = element
47+
depth = element.depth
48+
else:
49+
children.append(element)
50+
51+
if parent:
52+
yield parent, children

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Django
1+
Django<1.11 # django-versatileimagefield is not there yet.
22
feincms3[all]
33
psycopg2
44
pytz

0 commit comments

Comments
 (0)