this decorator will render template and encode it as JSON string if it find ajax_request variable in GET. It will not parse parent (extended) templates, only given template and nested (included). Only blocks will be rendered and encoded to JSON naming blockBLOCKNAME. Simple javascript can do ajax request adding ?ajax_request or &ajax_request (if needed) and update given html elements if they id's are same as blockBLOCKNAME. you can find a full code (including javascript) at my (http://projects.barbuza.info/trac/browser/django_addons/django_ajax/trunk/ sandbox).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from django.http import HttpResponse
from django.template import RequestContext, loader
from django.template.loader_tags import BlockNode
from simplejson import dumps
def ajax_render_to(template_name):
def deco_wrap(func):
def wrap(request, *args, **kwargs):
res = func(request, *args, **kwargs)
if type(res) is not dict:
return res
template = loader.get_template(template_name)
cont = RequestContext(request, res)
if not 'ajax_request' in request.GET:
return HttpResponse(template.render(cont))
blocks = []
for node in template.nodelist:
blocks = blocks + node.get_nodes_by_type(BlockNode)
result = {}
for block in blocks:
result["block__%s"%block.name] = block.render(cont)
return HttpResponse(dumps(result))
return wrap
return deco_wrap
|
More like this
- find even number by Rajeev529 2 weeks, 2 days ago
- Form field with fixed value by roam 1 month, 1 week ago
- New Snippet! by Antoliny0919 1 month, 2 weeks ago
- Add Toggle Switch Widget to Django Forms by OgliariNatan 4 months ago
- get_object_or_none by azwdevops 7 months, 3 weeks ago
Comments
Please login first before commenting.