Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

views.py 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from __future__ import absolute_import, unicode_literals
  2. from django.core import signing
  3. from django.http import HttpResponseBadRequest
  4. from django.template import Origin, TemplateDoesNotExist
  5. from django.template.engine import Engine
  6. from django.template.response import SimpleTemplateResponse
  7. from django.utils.safestring import mark_safe
  8. from debug_toolbar.decorators import require_show_toolbar
  9. @require_show_toolbar
  10. def template_source(request):
  11. """
  12. Return the source of a template, syntax-highlighted by Pygments if
  13. it's available.
  14. """
  15. template_origin_name = request.GET.get('template_origin', None)
  16. if template_origin_name is None:
  17. return HttpResponseBadRequest('"template_origin" key is required')
  18. try:
  19. template_origin_name = signing.loads(template_origin_name)
  20. except Exception:
  21. return HttpResponseBadRequest('"template_origin" is invalid')
  22. template_name = request.GET.get('template', template_origin_name)
  23. final_loaders = []
  24. loaders = Engine.get_default().template_loaders
  25. for loader in loaders:
  26. if loader is not None:
  27. # When the loader has loaders associated with it,
  28. # append those loaders to the list. This occurs with
  29. # django.template.loaders.cached.Loader
  30. if hasattr(loader, 'loaders'):
  31. final_loaders += loader.loaders
  32. else:
  33. final_loaders.append(loader)
  34. for loader in final_loaders:
  35. origin = Origin(template_origin_name)
  36. try:
  37. source = loader.get_contents(origin)
  38. break
  39. except TemplateDoesNotExist:
  40. pass
  41. else:
  42. source = "Template Does Not Exist: %s" % (template_origin_name,)
  43. try:
  44. from pygments import highlight
  45. from pygments.lexers import HtmlDjangoLexer
  46. from pygments.formatters import HtmlFormatter
  47. source = highlight(source, HtmlDjangoLexer(), HtmlFormatter())
  48. source = mark_safe(source)
  49. source.pygmentized = True
  50. except ImportError:
  51. pass
  52. # Using SimpleTemplateResponse avoids running global context processors.
  53. return SimpleTemplateResponse('debug_toolbar/panels/template_source.html', {
  54. 'source': source,
  55. 'template_name': template_name
  56. })