mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 04:53:36 +00:00
Convert Zulip to use Jinja2 templates.
This results in a substantial performance improvement for all of
Zulip's backend templates.
Changes in templates:
- Change `block.super` to `super()`.
- Remove `load` tag because Jinja2 doesn't support it.
- Use `minified_js()|safe` instead of `{% minified_js %}`.
- Use `compressed_css()|safe` instead of `{% compressed_css %}`.
- `forloop.first` -> `loop.first`.
- Use `{{ csrf_input }}` instead of `{% csrf_token %}`.
- Use `{# ... #}` instead of `{% comment %}`.
- Use `url()` instead of `{% url %}`.
- Use `_()` instead of `{% trans %}` because in Jinja `trans` is a block tag.
- Use `{% trans %}` instead of `{% blocktrans %}`.
- Use `{% raw %}` instead of `{% verbatim %}`.
Changes in tools:
- Check for `trans` block in `check-templates` instead of `blocktrans`
Changes in backend:
- Create custom `render_to_response` function which takes `request` objects
instead of `RequestContext` object. There are two reasons to do this:
1. `RequestContext` is not compatible with Jinja2
2. `RequestContext` in `render_to_response` is deprecated.
- Add Jinja2 related support files in zproject/jinja2 directory. It
includes a custom backend and a template renderer, compressors for js
and css and Jinja2 environment handler.
- Enable `slugify` and `pluralize` filters in Jinja2 environment.
Fixes #620.
This commit is contained in:
33
zproject/jinja2/__init__.py
Normal file
33
zproject/jinja2/__init__.py
Normal file
@@ -0,0 +1,33 @@
|
||||
from __future__ import absolute_import # Python 2 only
|
||||
|
||||
from django.contrib.staticfiles.storage import staticfiles_storage
|
||||
from django.template.defaultfilters import slugify, pluralize
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils import translation
|
||||
from django.http import HttpResponse
|
||||
from jinja2 import Environment
|
||||
|
||||
from .compressors import compressed_css, minified_js
|
||||
|
||||
|
||||
def render_to_response(*args, **kwargs):
|
||||
response = render_to_string(*args, **kwargs)
|
||||
return HttpResponse(response)
|
||||
|
||||
|
||||
def environment(**options):
|
||||
env = Environment(**options)
|
||||
env.globals.update({
|
||||
'static': staticfiles_storage.url,
|
||||
'url': reverse,
|
||||
'compressed_css': compressed_css,
|
||||
'minified_js': minified_js,
|
||||
})
|
||||
|
||||
env.install_gettext_translations(translation)
|
||||
|
||||
env.filters['slugify'] = slugify
|
||||
env.filters['pluralize'] = pluralize
|
||||
|
||||
return env
|
||||
Reference in New Issue
Block a user