Remove jinja2
Performance makes little difference, and I have block tags now
This commit is contained in:
parent
633d788cd6
commit
2ba54c9a90
7 changed files with 63 additions and 17 deletions
|
@ -4,4 +4,3 @@ gunicorn
|
||||||
markdown
|
markdown
|
||||||
chrono
|
chrono
|
||||||
django-debug-toolbar
|
django-debug-toolbar
|
||||||
django-jinja
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
from django.db import models
|
from django.db import models
|
||||||
import markdown
|
import markdown
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.template import engines
|
from django.template import Template
|
||||||
from django_jinja.backend import Origin
|
|
||||||
|
|
||||||
class Tag(models.Model):
|
class Tag(models.Model):
|
||||||
__yamdl__ = True
|
__yamdl__ = True
|
||||||
|
@ -51,7 +50,5 @@ class Page(models.Model):
|
||||||
@cached_property
|
@cached_property
|
||||||
def content_template(self):
|
def content_template(self):
|
||||||
if (cached_template := self._template_cache.get(self.slug)) is None:
|
if (cached_template := self._template_cache.get(self.slug)) is None:
|
||||||
cached_template = self._template_cache[self.slug] = engines["jinja2"].from_string(self.content)
|
cached_template = self._template_cache[self.slug] = Template(self.content, name=self.slug)
|
||||||
cached_template.origin = Origin(name=self.slug, template_name=self.slug)
|
|
||||||
cached_template.name = self.slug
|
|
||||||
return cached_template
|
return cached_template
|
||||||
|
|
48
yamdl_playground/core/simple_tags.py
Normal file
48
yamdl_playground/core/simple_tags.py
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
from inspect import getfullargspec, unwrap
|
||||||
|
from django.template.library import parse_bits, SimpleNode
|
||||||
|
from functools import wraps
|
||||||
|
|
||||||
|
class SimpleBlockNode(SimpleNode):
|
||||||
|
def __init__(self, nodelist, func, takes_context, args, kwargs, target_var):
|
||||||
|
super().__init__(func, takes_context, args, kwargs, target_var)
|
||||||
|
self.nodelist = nodelist
|
||||||
|
|
||||||
|
def get_resolved_arguments(self, context):
|
||||||
|
resolved_args, resolved_kwargs = super().get_resolved_arguments(context)
|
||||||
|
resolved_args.insert(1 if self.takes_context else 0, self.nodelist.render(context))
|
||||||
|
return resolved_args, resolved_kwargs
|
||||||
|
|
||||||
|
|
||||||
|
def simple_block_tag(register, takes_context=None, name=None):
|
||||||
|
def dec(func):
|
||||||
|
argspec = getfullargspec(unwrap(func))
|
||||||
|
function_name = name or func.__name__
|
||||||
|
|
||||||
|
@wraps(func)
|
||||||
|
def tag_compiler(parser, token):
|
||||||
|
bits = token.split_contents()[1:]
|
||||||
|
target_var = None
|
||||||
|
if len(bits) >= 2 and bits[-2] == "as":
|
||||||
|
target_var = bits[-1]
|
||||||
|
bits = bits[:-2]
|
||||||
|
bits = [''] + bits # add placeholder for content arg
|
||||||
|
args, kwargs = parse_bits(
|
||||||
|
parser=parser,
|
||||||
|
bits=bits,
|
||||||
|
params=argspec.args,
|
||||||
|
varargs=argspec.varargs,
|
||||||
|
varkw=argspec.varkw,
|
||||||
|
defaults=argspec.defaults,
|
||||||
|
kwonly=argspec.kwonlyargs,
|
||||||
|
kwonly_defaults=argspec.kwonlydefaults,
|
||||||
|
takes_context=takes_context,
|
||||||
|
name=function_name
|
||||||
|
)
|
||||||
|
args = args[1:] # remove content placeholder
|
||||||
|
nodelist = parser.parse((f'end{function_name}',))
|
||||||
|
parser.delete_first_token()
|
||||||
|
return SimpleBlockNode(nodelist, func, takes_context, args, kwargs, target_var)
|
||||||
|
|
||||||
|
register.tag(function_name, tag_compiler)
|
||||||
|
return func
|
||||||
|
return dec
|
|
@ -1,7 +1,9 @@
|
||||||
|
{% load core_tags %}
|
||||||
<head>
|
<head>
|
||||||
<title>{{ page.title }}</title>
|
<title>{{ page.title }}</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
{% mytag %}content{% endmytag %}
|
||||||
{{ page.toc.html|safe }}
|
{{ page.toc.html|safe }}
|
||||||
{{ content|safe }}
|
{{ content }}
|
||||||
</body>
|
</body>
|
9
yamdl_playground/core/templatetags/core_tags.py
Normal file
9
yamdl_playground/core/templatetags/core_tags.py
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
from yamdl_playground.core.simple_tags import simple_block_tag
|
||||||
|
from django import template
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
|
@simple_block_tag(register, takes_context=True)
|
||||||
|
def mytag(context, content):
|
||||||
|
return "foo{}bar".format(content)
|
|
@ -19,7 +19,7 @@ def content(request, slug):
|
||||||
|
|
||||||
return render(request, "content.html", {
|
return render(request, "content.html", {
|
||||||
"page": page,
|
"page": page,
|
||||||
"content": page.content_template.render({"request": request, "page": page})
|
"content": page.content_template.render(Context({"request": request, "page": page}))
|
||||||
})
|
})
|
||||||
|
|
||||||
cached_content = cache_page(600, cache="mem")(content)
|
cached_content = cache_page(600, cache="mem")(content)
|
||||||
|
|
|
@ -58,15 +58,6 @@ TEMPLATES = [
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
'BACKEND': 'django_jinja.jinja2.Jinja2',
|
|
||||||
'DIRS': [],
|
|
||||||
'APP_DIRS': True,
|
|
||||||
'OPTIONS': {
|
|
||||||
'app_dirname': "jinja2",
|
|
||||||
"match_extension": ".html"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
WSGI_APPLICATION = 'yamdl_playground.wsgi.application'
|
WSGI_APPLICATION = 'yamdl_playground.wsgi.application'
|
||||||
|
|
Loading…
Reference in a new issue