import json from jinja2 import Environment from markupsafe import Markup from webpack_loader.templatetags.webpack_loader import render_bundle from django.urls import reverse from django.contrib import messages from django.conf import settings from django.templatetags.static import static from django.utils.translation import gettext, ngettext def get_app_config(request): info_dict = { 'debug': settings.DEBUG, 'isAuthenticated': False, 'user': None, 'baseUrl': settings.FORCE_SCRIPT_NAME, } if request.user and request.user.is_authenticated: info_dict['isAuthenticated'] = True info_dict['user'] = { 'username': request.user.username, 'email': request.user.email, 'phone': request.user.phone, 'name': request.user.name, 'isSuperUser': request.user.is_superuser, 'isStaff': request.user.is_staff, 'lastLogin': request.user.last_login.strftime('%Y-%m-%d'), 'avatar_url': request.user.avatar_url, 'permissions': list(request.user.get_all_permissions()) } return json.dumps(info_dict, separators=(',', ':')) def environment(**options): env = Environment(**options) env.install_gettext_callables(gettext, ngettext, newstyle=True) env.globals.update({ # webpack_loader 版本太老了,还在用旧的 jinja2 扩展,在这里暂时 monkey patch 一下 'render_bundle': lambda *a, **k: Markup(render_bundle(*a, **k)), 'static': static, 'json_loads': json.loads, 'reverse': reverse, 'get_messages': messages.get_messages, 'get_app_config': get_app_config, 'django_settings': settings }) return env