diff --git a/www/conservancy/static/img/projects/microblocks.png b/www/conservancy/static/img/projects/microblocks.png
new file mode 100644
index 0000000000000000000000000000000000000000..e15b6c793b1bba226f00351e9bf98548e1ac2310
GIT binary patch
literal 14703
zcmXYY2Rzm9`~KUOdF;Ij*$&ww9fT;G>`k&l_DJMVXb{KDu}U^snOUDWNHWWatZc_R
z=I`4H7?;T5j@cN0XKX@8KS;63!ECHGp0meSA0YMIrU7(<#AaM_G
zPk$!|Ul(zo$8K3$%B&E?4e20mnFMEV=7a<@jN$s)w=u0e(ReY}zGXK(g>H$_AdFux
zR0w%%B3_)@){Rd;w3^5(5A1w6miXXjsi{@D1=H^iB0my(hTp8^q|Ea}O>%^{xz*o%
z!JM8h4z*%(eyemsLn|SBk^>5ELlpjV3M(qx8mq3v)ST9=35X%cmym|iWtkW{x+A=@
zH1ZO?e&X(`3hM}l`0(5zV(6F)uEtJE2$nEsV{IKNe?LgJaQ(y^bH)a_5v;Du&)g{5
zppJ%r{)5G7Wfg}IM;qfEOQ*@|*WP5Nh@47O{nFTY=DQp4`DtQeVq0mctd@QPu%q7pUi0OzE4CdkkcXdcHtZVDTyMPkf9q>yeSQ6hrY4;CsEou*u3r&H
zGk(}XIj7%^eo(Zrfr3C}DIaZuvVEnUt!>+jzQv{)nL%>NF=O-(78G{PAw)q;2I+qRn58=IO?qcl|UO%)a5v$Ox2n-zViXWCx87%zwK+%V+!Y^(FPH@>RpPyE0a`tO79E7&z?HcsI9`rV9Z1^?v$+Hm!|
z7M6qrPdo6T4`pR#0%&uGYi*+jN|gR9LxVStA^XFPsolZBo}M1zgLrZ9HIrPi{)LR^
z-=guD-T6OrcB*(|14GKLs(T@B`09ay2M|wp!|n;#{jh1_inmE@a*qQ816x`z_xEdk
z{rsjB{&SiBlv#|Uph+T(UQAKryxJ&wfrIycy9+&s!rOWfj4W;|{xh$#*R;&pR#5vu
z)3eIfLspG^7!-}n{nmtj@#2LZag9M(piTQzBo$utGip`&f_Z}IBE9rpxk203(1`cz
zCk~JSaWptzrU~0HFIx`lI(NhHT5z~6+2$@+=OyDzADNbxMgqs0LibHg7H1
zvQHb17_!e?ek0lg0^a)Z_3|B0PtQ}8va}g;i58es@5^t~lT3EuPw(*4&PB}04Az3h
z`_6`}EX_1Yw4eQ$o&9mw5Y#JViTf^1k+Jt`{7ztS#FoQ!Wa!j9f){5Ijl?p-s>+
z8@8R4e>;A8rinqsjKAL0^jvwH7`)N?$19`bgMVY|=8!Jle9eIPZ4fN}4<9Y{rzLpt
zP7~UbLL2Ru7es;L%oNi>=R~q#xeIS%Oui1^MzrHQ7PQgbQ-TcA&7F2VZqTqm#Jwr$@7^)~Y&twVJa)AzetZ>#
zxCM5cFqBLbO+c*-dqzyz-<0nzlbKO0?f(i%OZ>F76udq;Ir-Q%?Ek<14gXny4HwaS
zHHban`>hb!pTB>-Lk*>kVB7Vv!gnk
z
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
literal 0
HcmV?d00001
diff --git a/www/conservancy/static/projects/current/index.html b/www/conservancy/static/projects/current/index.html
index fc430c685cd967b48322cfbaa3f9042b178de22d..8442a4ecc5e76c4e48e6d000f7c48204cb695f7f 100644
--- a/www/conservancy/static/projects/current/index.html
+++ b/www/conservancy/static/projects/current/index.html
@@ -467,6 +467,18 @@ speed, bandwidth distribution, and redundancy of an optimized hybrid
mirror/peer-to-peer network, without any questions of legality, integrity,
or safety.
+
+
+
+
+
+
+MicroBlocks is a new programming language that runs right inside microcontroller boards such as the micro:bit, the NodeMCU and many Arduino boards. The MicroBlocks system allows for dynamic, parallel and interactive programming, but with the twist of letting your projects run autonomously inside the board without being tethered to a computer.
+
diff --git a/www/conservancy/static/views.py b/www/conservancy/static/views.py
index a07296ce32c39ae2105404e23decd923b3b745ea..bbf2f56b8008bf267e47eb1c7143e1d120504e5f 100644
--- a/www/conservancy/static/views.py
+++ b/www/conservancy/static/views.py
@@ -1,8 +1,10 @@
import mimetypes
import os.path
from django.http import HttpResponse
-from django.template import RequestContext, loader
-from conservancy.apps.fundgoal.models import FundraisingGoal as FundraisingGoal
+from django.template.response import TemplateResponse
+
+from conservancy.apps.fundgoal.models import FundraisingGoal
+from conservancy.local_context_processors import fundgoal_lookup
STATIC_ROOT = os.path.abspath(os.path.dirname(__file__))
FILESYSTEM_ENCODING = 'utf-8'
@@ -11,10 +13,9 @@ def handler(request, errorcode):
path = os.path.join('error', str(errorcode), 'index.html')
fullpath = os.path.join(STATIC_ROOT, path)
if not os.path.exists(fullpath):
- return HttpResponse("Internal error: " + path)
- template = loader.get_template(path)
- context = RequestContext(request)
- return HttpResponse(template.render(context), status=int(errorcode))
+ return HttpResponse("Internal error: " + path, status=int(errorcode))
+ else:
+ return TemplateResponse(request, path, status=int(errorcode))
def handler401(request):
return handler(request, 401)
@@ -28,13 +29,6 @@ def handler404(request):
def handler500(request):
return handler(request, 500)
-def fundgoal_lookup(fundraiser_sought):
- try:
- return FundraisingGoal.objects.get(fundraiser_code_name=fundraiser_sought)
- except FundraisingGoal.DoesNotExist:
- # we have no object! do something
- return None
-
def index(request, *args, **kwargs):
path = request.path.lstrip(u'/')
if path.endswith(u'/'):
@@ -49,23 +43,16 @@ def index(request, *args, **kwargs):
return handler404(request)
content_type, _ = mimetypes.guess_type(path)
if content_type != 'text/html':
- content = open(fullpath)
+ return HttpResponse(open(fullpath, 'rb'), content_type)
else:
- content_type = None # Let Django use its default
- template = loader.get_template(path)
-
- kwargs = kwargs.copy()
- if kwargs.has_key('fundraiser_sought'):
- kwargs['fundgoal'] = fundgoal_lookup(kwargs['fundraiser_sought'])
-
- kwargs['sitefundgoal'] = fundgoal_lookup('supporterrun')
-
- context = RequestContext(request, kwargs)
- content = template.render(context)
- return HttpResponse(content, content_type)
+ context = kwargs.copy()
+ try:
+ context['fundgoal'] = fundgoal_lookup(kwargs['fundraiser_sought'])
+ except KeyError:
+ pass
+ return TemplateResponse(request, path, context)
def debug(request):
path = request.get_full_path()
path = path.lstrip('/')
return HttpResponse("Hello, static world: " + path)
-
diff --git a/www/conservancy/templates/base_conservancy.html b/www/conservancy/templates/base_conservancy.html
index 080f458014b64a4b4840505ce5f474588b7a6b0b..1e12166afe32749772eac7d69261df8bb4abd564 100644
--- a/www/conservancy/templates/base_conservancy.html
+++ b/www/conservancy/templates/base_conservancy.html
@@ -62,7 +62,6 @@ this_match_remaining: this_match_goal - this_match_so_far
{% endcomment %}
-{% comment %}
{% if sitefundgoal %}
{% with this_match_goal=sitefundgoal.fundraiser_goal_amount this_match_so_far=sitefundgoal.fundraiser_so_far_amount %}
{% with this_match_remaining=this_match_goal|subtract:this_match_so_far %}
@@ -96,7 +95,6 @@ this_match_remaining: this_match_goal - this_match_so_far
{% endwith %}
{% endwith %}
{% endif %}
-{% endcomment %}
{% block outercontent %} {% block content %}{% endblock %}
{% endblock %}