-
Notifications
You must be signed in to change notification settings - Fork 3
/
middleware.py
95 lines (75 loc) · 2.97 KB
/
middleware.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from django.contrib.auth import REDIRECT_FIELD_NAME
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.utils.http import urlquote
from mezzanine.conf import settings
from mezzanine.pages import page_processors
from mezzanine.pages.models import Page
from mezzanine.pages.views import page as page_view
from mezzanine.utils.urls import path_to_slug
from mezzyblocks.models import Block
# A template context middleware that will get and append any appropriate
# blocks to the template context
class BlocksTemplateContextMiddleware(object):
ifblocks = False
def process_block(self, block):
module = __import__( "mezzyblocks.blocktypes." + block.blocktype.path, fromlist='block_context_processor')
html = module.block_context_processor(block)
return html
def process_request(self, request):
try: # Hope that we find the Page object
slug = request.path[1: -1] # remove the first and last slash from the request path
page = Page.objects.get(slug=slug)
except Page.DoesNotExist:
print "Did not find any Page with path: "+request.path
page = False
if page: # We found a matching Page object
try: # Attempt to find blocks for our Page object
blocks = page.block_set.filter(published=True)
try: # Time to add our blocks to the template context!
response.context_data.blocks = {}
except:
non = False
if blocks: # If we found any blocks at all
blocks_temp = []
i = 0
for block in blocks:
# Wrap the block in a special DIV container for a2gcms blocks
# process the block and insert it
# at the end we close the wrapping DIV container
#
# XXX: This will render the block, regardless of if
# it's actually included in the template or not. It's
# also hard-coding HTML, instead of relying on django
# template-processing.
# I'm thinking this does not belong here, but rather
# in the template of the tag-processing.
# It's unclear if there's a point to a2gcms_block.
# One reason to have it could be hookability from
# javascript, but in that case the blocktype and
# probably an ID should be included as attributes.
# If hookability is the point, it *definitively*
# belongs in the template or a static, keeping the
# HTML with the javascript.
# Possible exception only if it's part of a clearly
# defined API.
html = '<div class="a2gcms_block">'
html += self.process_block(block)
html += '</div>'
block.html = html
blocks_temp.append(block)
#print html
i = i+1
# response.context_data.blocks = blocks_temp
request.blocks = blocks_temp
self.ifblocks = i
except Block.DoesNotExist:
print "We found no blocks..."
blocks = False
return None
def process_template_response(self, request, response):
print self.ifblocks
if self.ifblocks:
response.context_data.ifblocks = self.ifblocks
self.ifblocks = False
return response