Skip to content

Instantly share code, notes, and snippets.

@tubaman
Created December 4, 2020 00:19
Show Gist options
  • Save tubaman/e35bb913eb712e87b9d5997d32eeec80 to your computer and use it in GitHub Desktop.
Save tubaman/e35bb913eb712e87b9d5997d32eeec80 to your computer and use it in GitHub Desktop.
Remote Template Loader for Django
from urllib.request import urlopen
from django.conf import settings
from django.template import Origin, TemplateDoesNotExist
from django.template.loaders.base import Loader as BaseLoader
from django.utils.module_loading import import_string
class Loader(BaseLoader):
def get_contents(self, origin):
remote_template_settings = settings.REMOTETEMPLATELOADER_TEMPLATES
template_settings = remote_template_settings[origin.template_name]
resource = urlopen(origin.name)
encoding = resource.headers.get_content_charset()
if encoding is None:
encoding = 'utf-8'
page = resource.read().decode(encoding)
#file('/tmp/page.html', 'wb').write(page)
#page = file('/tmp/page.html', 'rb').read()
try:
templatifier = template_settings['templatifier']
except KeyError:
pass
else:
templatify = import_string(templatifier)
page = templatify(page)
return page
def get_template_sources(self, template_name, template_dirs=None):
remote_template_settings = settings.REMOTETEMPLATELOADER_TEMPLATES
try:
template_settings = remote_template_settings[template_name]
except KeyError:
return
for url in template_settings['urls']:
yield Origin(name=url, template_name=template_name, loader=self)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment