Sunum yaparken şablon içeriğine erişebilen bir Jinja2 Uzantısı yazmak mümkün mü? Bir içerik değişkenine erişen ve bu değişkene dayanan bazı verileri çıkaran bir uzantı yazmak istiyorum. Böyle bir uzantının nasıl yazılacağı konusunda yeterli bilgi bulamadım. Ben somehow_get_variable()
olmadığından ben NameError alabileceğimi düşündüm İçeriğe Erişimi Olan Jinja Eklentisi
SyntaxError at/
invalid syntax (foo.jinja, line 7)
olsun
foo.jinja
<!DOCTYPE html>
<html>
<body>
<h1>This is a Test</h1>
{% csrf %}
</body>
</html>
yılında,
class CsrfExtension(jinja2.ext.Extension):
r""" Adds a {% csrf %} tag to Jinja. """
tags = set(['csrf'])
template = '<input type="hidden" name="csrfmiddlewaretoken" value="%s">'
def parse(self, parser):
token = next(parser.stream)
lineno = token.lineno
return self.call_method('_render_csrf', lineno=lineno)
def _render_csrf(self, value, name, *args, **kwargs):
csrf_token = somehow_get_variable('csrf_token')
return jinja2.Markup(self.template % csrf_token)
Ama:
Şu anda, bu var tanımladı. B) Değişkeni mevcut içerikten nasıl alacağımızı ve b) Uzantının doğru bir şekilde nasıl yazılacağını bilmek zorundayım.
Ayrıca, neden 7 hat? {% csrf %}
etiketi satır 5'tedir. 'u {% csrf %}
etiketinde yalnızca bir satıra sahip olmama rağmen, satır 7 yazıyor.