def __init__(self): from typogrify.templatetags import jinja_filters self.filename = None self.fulltext = None self.context = None self.template = DEFAULT_TEMPLATE self.tmpl_env = jinja2.Environment( loader=jinja2.FileSystemLoader(TEMPLATE_DIR)) jinja_filters.register(self.tmpl_env)
def JINJA_ENV(self): from engineer.filters import format_datetime, markdown_filter, localtime, naturaltime, compress from engineer.processors import preprocess_less from engineer.themes import ThemeManager # Configure Jinja2 environment logger.debug("Configuring the Jinja environment.") # Helper function to look up a URL by name def urlname(name, *args): url = settings.URLS.get(name, settings.HOME_URL) if isfunction(url): return url(*args) else: return url env = Environment( loader=ChoiceLoader( [FileSystemLoader([self.TEMPLATE_DIR]), ThemeManager.current_theme().template_loader, #self.ENGINEER.THEMES_DIR / 'base_templates', FileSystemLoader([self.ENGINEER.TEMPLATE_DIR])] ), extensions=['jinja2.ext.with_', ], #'compressinja.html.HtmlCompressor'], bytecode_cache=FileSystemBytecodeCache(directory=self.JINJA_CACHE_DIR), trim_blocks=True) # Filters env.filters['compress'] = compress env.filters['date'] = format_datetime env.filters['localtime'] = localtime env.filters['naturaltime'] = naturaltime env.filters['markdown'] = markdown_filter env.filters['typogrify_no_widont'] = typogrify_no_widont register(env) # register typogrify filters # Globals env.globals['theme'] = ThemeManager.current_theme() env.globals['urlname'] = urlname env.globals['preprocess_less'] = preprocess_less # env.globals['url'] = url env.globals['STATIC_URL'] = self.STATIC_URL env.globals['DEBUG'] = self.DEBUG env.globals['settings'] = self return env
def content_filter(node, content): """ This is the actual content filter called by :class:`exhibition.main.Node` on appropiate nodes. :param node: The node being rendered :param content: The content of the node, stripped of any YAML frontmatter """ env = Environment( loader=FileSystemLoader(node.meta["templates"]), extensions=[RaiseError, Mark], autoescape=True, ) env.filters["markdown"] = markdown env.filters["metasort"] = metasort env.filters["metaselect"] = metaselect env.filters["metareject"] = metareject typogrify_filters.register(env) parts = [] if node.meta.get("extends"): parts.append(EXTENDS_TEMPLATE_TEMPLATE % node.meta["extends"]) if node.meta.get("default_block"): parts.extend([ START_BLOCK_TEMPLATE % node.meta["default_block"], content, END_BLOCK_TEMPLATE, ]) else: parts.append(content) content = "".join(parts) template = env.from_string(content) return template.render({ NODE_TMPL_VAR: node, "time_now": datetime.now(timezone.utc), })
def update_environment(cls, jinja_env): super(BundledFilters, cls).update_environment(jinja_env) logger = cls.get_logger() register(jinja_env) # register typogrify filters logger.debug("Registered typogrify filters.")
def configure(self, site, engine=None): """ Uses the site object to initialize the jinja environment. """ self.site = site self.engine = engine self.preprocessor = (engine.preprocessor if hasattr(engine, 'preprocessor') else None) self.loader = HydeLoader(self.sitepath, site, self.preprocessor) default_extensions = [ IncludeText, Spaceless, Asciidoc, Markdown, restructuredText, Syntax, Reference, Refer, YamlVar, 'jinja2.ext.do', 'jinja2.ext.loopcontrols', 'jinja2.ext.with_' ] defaults = { 'line_statement_prefix': '$$$', 'trim_blocks': True, } settings = dict() settings.update(defaults) settings['extensions'] = list() settings['extensions'].extend(default_extensions) settings['filters'] = {} conf = {} try: conf = attrgetter('config.jinja2')(site).to_dict() except AttributeError: pass settings.update( dict([(key, conf[key]) for key in defaults if key in conf])) extensions = conf.get('extensions', []) if isinstance(extensions, list): settings['extensions'].extend(extensions) else: settings['extensions'].append(extensions) filters = conf.get('filters', {}) if isinstance(filters, dict): for name, value in filters.items(): parts = value.split('.') module_name = '.'.join(parts[:-1]) function_name = parts[-1] module = __import__(module_name, fromlist=[function_name]) settings['filters'][name] = getattr(module, function_name) self.env = Environment( loader=self.loader, undefined=SilentUndefined, line_statement_prefix=settings['line_statement_prefix'], trim_blocks=True, bytecode_cache=FileSystemBytecodeCache(), extensions=settings['extensions']) self.env.globals['media_url'] = media_url self.env.globals['content_url'] = content_url self.env.globals['full_url'] = full_url self.env.globals['engine'] = engine self.env.globals['deps'] = {} self.env.filters['urlencode'] = urlencode self.env.filters['urldecode'] = urldecode self.env.filters['asciidoc'] = asciidoc self.env.filters['markdown'] = markdown self.env.filters['restructuredtext'] = restructuredtext self.env.filters['syntax'] = syntax self.env.filters['date_format'] = date_format self.env.filters['xmldatetime'] = xmldatetime self.env.filters['islice'] = islice self.env.filters['top'] = top self.env.filters.update(settings['filters']) config = {} if hasattr(site, 'config'): config = site.config self.env.extend(config=config) try: from typogrify.templatetags import jinja_filters except ImportError: jinja_filters = False if jinja_filters: jinja_filters.register(self.env)
from seam.core import app from seam.views import bp from typogrify.templatetags.jinja_filters import register app.register_blueprint(bp) register(app.jinja_env)
import json import argparse from flask import Flask, render_template from typogrify.templatetags import jinja_filters import app_config from render_utils import make_context, urlencode_filter, unescape_filter import static app = Flask(__name__) app.jinja_env.filters['urlencode'] = urlencode_filter app.jinja_env.filters['unescape'] = unescape_filter jinja_filters.register(app.jinja_env) # Example application views @app.route('/') def index(): """ Example view demonstrating rendering a simple HTML page. """ context = make_context() with open('data/featured.json') as f: context['featured'] = json.load(f) return render_template('index.html', **context) @app.route('/comments/')
def configure(self, site, engine=None): """ Uses the site object to initialize the jinja environment. """ self.site = site self.engine = engine self.preprocessor = (engine.preprocessor if hasattr(engine, 'preprocessor') else None) self.loader = HydeLoader(self.sitepath, site, self.preprocessor) default_extensions = [ IncludeText, Spaceless, Asciidoc, Markdown, restructuredText, Syntax, Reference, Refer, YamlVar, 'jinja2.ext.do', 'jinja2.ext.loopcontrols', 'jinja2.ext.with_' ] defaults = { 'line_statement_prefix': '$$$', 'trim_blocks': True, } settings = dict() settings.update(defaults) settings['extensions'] = list() settings['extensions'].extend(default_extensions) settings['filters'] = {} settings['tests'] = {} conf = {} try: conf = attrgetter('config.jinja2')(site).to_dict() except AttributeError: pass settings.update( dict([(key, conf[key]) for key in defaults if key in conf])) extensions = conf.get('extensions', []) if isinstance(extensions, list): settings['extensions'].extend(extensions) else: settings['extensions'].append(extensions) filters = conf.get('filters', {}) if isinstance(filters, dict): for name, value in filters.items(): parts = value.split('.') module_name = '.'.join(parts[:-1]) function_name = parts[-1] module = __import__(module_name, fromlist=[function_name]) settings['filters'][name] = getattr(module, function_name) tests = conf.get('tests', {}) if isinstance(tests, dict): for name, value in tests.items(): parts = value.split('.') module_name = '.'.join(parts[:-1]) function_name = parts[-1] module = __import__(module_name, fromlist=[function_name]) settings['tests'][name] = getattr(module, function_name) self.env = Environment( loader=self.loader, undefined=SilentUndefined, line_statement_prefix=settings['line_statement_prefix'], trim_blocks=True, bytecode_cache=FileSystemBytecodeCache(), extensions=settings['extensions']) self.env.globals['media_url'] = media_url self.env.globals['content_url'] = content_url self.env.globals['full_url'] = full_url self.env.globals['engine'] = engine self.env.globals['deps'] = {} self.env.filters['urlencode'] = urlencode self.env.filters['urldecode'] = urldecode self.env.filters['asciidoc'] = asciidoc self.env.filters['markdown'] = markdown self.env.filters['restructuredtext'] = restructuredtext self.env.filters['syntax'] = syntax self.env.filters['date_format'] = date_format self.env.filters['xmldatetime'] = xmldatetime self.env.filters['islice'] = islice self.env.filters['top'] = top self.env.filters.update(settings['filters']) self.env.tests.update(settings['tests']) config = {} if hasattr(site, 'config'): config = site.config self.env.extend(config=config) try: from typogrify.templatetags import jinja_filters except ImportError: jinja_filters = False if jinja_filters: jinja_filters.register(self.env)
def update_environment(cls, jinja_env): super(BundledFilters, cls).update_environment(jinja_env) logger = cls.get_logger() register(jinja_env) # register typogrify filters logger.debug("Registered typogrify filters.")
import oauth import static from collections import defaultdict from flask import Flask, make_response, render_template from render_utils import make_context, smarty_filter, urlencode_filter from typogrify.templatetags import jinja_filters from urlparse import urlparse, parse_qs from werkzeug.debug import DebuggedApplication app = Flask(__name__) app.debug = app_config.DEBUG app.add_template_filter(smarty_filter, name='smarty') app.add_template_filter(urlencode_filter, name='urlencode') jinja_filters.register(app.jinja_env) @app.route('/') @oauth.oauth_required def index(): context = make_context() speeches = [] for speech in commencement_data.load(): speech['share_url'] = 'http://%s/%s/speech/%s/' % ( app_config.PRODUCTION_S3_BUCKET['bucket_name'], app_config.PROJECT_SLUG, speech['slug']) speech['money_quote_image'] = '%s/quote-images/%s.png' % ( app_config.S3_BASE_URL, speech['slug']) speech[
def configure(self, site, engine=None): """ Uses the site object to initialize the jinja environment. """ self.site = site self.engine = engine self.preprocessor = engine.preprocessor if hasattr(engine, "preprocessor") else None self.loader = HydeLoader(self.sitepath, site, self.preprocessor) default_extensions = [ IncludeText, Spaceless, Asciidoc, Markdown, restructuredText, Syntax, Reference, Refer, YamlVar, "jinja2.ext.do", "jinja2.ext.loopcontrols", "jinja2.ext.with_", ] defaults = {"line_statement_prefix": "$$$", "trim_blocks": True} settings = dict() settings.update(defaults) settings["extensions"] = list() settings["extensions"].extend(default_extensions) settings["filters"] = {} settings["tests"] = {} conf = {} try: conf = attrgetter("config.jinja2")(site).to_dict() except AttributeError: pass settings.update(dict([(key, conf[key]) for key in defaults if key in conf])) extensions = conf.get("extensions", []) if isinstance(extensions, list): settings["extensions"].extend(extensions) else: settings["extensions"].append(extensions) filters = conf.get("filters", {}) if isinstance(filters, dict): for name, value in filters.items(): parts = value.split(".") module_name = ".".join(parts[:-1]) function_name = parts[-1] module = __import__(module_name, fromlist=[function_name]) settings["filters"][name] = getattr(module, function_name) tests = conf.get("tests", {}) if isinstance(tests, dict): for name, value in tests.items(): parts = value.split(".") module_name = ".".join(parts[:-1]) function_name = parts[-1] module = __import__(module_name, fromlist=[function_name]) settings["tests"][name] = getattr(module, function_name) self.env = Environment( loader=self.loader, undefined=SilentUndefined, line_statement_prefix=settings["line_statement_prefix"], trim_blocks=True, bytecode_cache=FileSystemBytecodeCache(), extensions=settings["extensions"], ) self.env.globals["media_url"] = media_url self.env.globals["content_url"] = content_url self.env.globals["full_url"] = full_url self.env.globals["engine"] = engine self.env.globals["deps"] = {} self.env.filters["urlencode"] = urlencode self.env.filters["urldecode"] = urldecode self.env.filters["asciidoc"] = asciidoc self.env.filters["markdown"] = markdown self.env.filters["restructuredtext"] = restructuredtext self.env.filters["syntax"] = syntax self.env.filters["date_format"] = date_format self.env.filters["xmldatetime"] = xmldatetime self.env.filters["islice"] = islice self.env.filters["top"] = top self.env.filters.update(settings["filters"]) self.env.tests.update(settings["tests"]) config = {} if hasattr(site, "config"): config = site.config self.env.extend(config=config) try: from typogrify.templatetags import jinja_filters except ImportError: jinja_filters = False if jinja_filters: jinja_filters.register(self.env)