society-self-service/selfserv/jinja2.py

51 lines
1.7 KiB
Python

# Society Self-Service
# Copyright © 2018-2023 Yingtong Li (RunasSudo)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import markdown
from django.contrib.staticfiles.storage import staticfiles_storage
from django.conf import settings
from django.urls import reverse
from django.utils import timezone
from jinja2 import Environment, select_autoescape
from markupsafe import Markup
import importlib
from .mdx_urlize import UrlizeExtension
def environment(**options):
options['autoescape'] = select_autoescape(
disabled_extensions=('txt',),
default_for_string=True,
default=True,
)
env = Environment(**options)
env.globals.update({
'import': importlib.import_module, # forgive me for I have sinned
'localtime': lambda dt: timezone.localtime(dt).strftime('%Y-%m-%d %H:%M'),
'settings': settings,
'static': staticfiles_storage.url,
'url': reverse,
'MEDIA_URL': settings.MEDIA_URL,
})
env.filters.update({
'markdown': lambda x: Markup(markdown.markdown(x, extensions=['nl2br', UrlizeExtension()]))
})
return env