示例#1
0
文件: test_ext.py 项目: sahwar/jinja
    def test_scoped_setting(self):
        env = Environment(extensions=["jinja.ext.autoescape"], autoescape=True)
        tmpl = env.from_string("""
            {{ "<HelloWorld>" }}
            {% autoescape false %}
                {{ "<HelloWorld>" }}
            {% endautoescape %}
            {{ "<HelloWorld>" }}
        """)
        assert tmpl.render().split() == [
            u"&lt;HelloWorld&gt;",
            u"<HelloWorld>",
            u"&lt;HelloWorld&gt;",
        ]

        env = Environment(extensions=["jinja.ext.autoescape"],
                          autoescape=False)
        tmpl = env.from_string("""
            {{ "<HelloWorld>" }}
            {% autoescape true %}
                {{ "<HelloWorld>" }}
            {% endautoescape %}
            {{ "<HelloWorld>" }}
        """)
        assert tmpl.render().split() == [
            u"<HelloWorld>",
            u"&lt;HelloWorld&gt;",
            u"<HelloWorld>",
        ]
示例#2
0
 def test_replace(self, env):
     env = Environment()
     tmpl = env.from_string('{{ string|replace("o", 42) }}')
     assert tmpl.render(string="<foo>") == "<f4242>"
     env = Environment(autoescape=True)
     tmpl = env.from_string('{{ string|replace("o", 42) }}')
     assert tmpl.render(string="<foo>") == "&lt;f4242&gt;"
     tmpl = env.from_string('{{ string|replace("<", 42) }}')
     assert tmpl.render(string="<foo>") == "42foo&gt;"
     tmpl = env.from_string('{{ string|replace("o", ">x<") }}')
     assert tmpl.render(string=Markup("foo")) == "f&gt;x&lt;&gt;x&lt;"
示例#3
0
 def compile_down(self, prefix_loader, zip="deflated", py_compile=False):
     log = []
     self.reg_env = Environment(loader=prefix_loader)
     if zip is not None:
         fd, self.archive = tempfile.mkstemp(suffix=".zip")
         os.close(fd)
     else:
         self.archive = tempfile.mkdtemp()
     self.reg_env.compile_templates(
         self.archive, zip=zip, log_function=log.append, py_compile=py_compile
     )
     self.mod_env = Environment(loader=loaders.ModuleLoader(self.archive))
     return "".join(log)
示例#4
0
 def model_run(self, model_context):
     context = self._build_context(model_context)
     # mostrar el reporte
     fileloader = PackageLoader('m2000', 'templates')
     env = Environment(loader=fileloader)
     t = env.get_template('cartera_perdida_x_incobrable.html')
     yield PrintHtml(t.render(context))
示例#5
0
 def model_run(self, model_context):
     context = self._build_context(model_context)
     # mostrar el reporte
     fileloader = PackageLoader('m2000', 'templates')
     env = Environment(loader=fileloader)
     t = env.get_template('recaudacion_potencial_total_x_barrio.html')
     yield PrintHtml(t.render(context))
示例#6
0
 def model_run(self, model_context):
     context = self._build_context(model_context)
     # mostrar el reporte
     fileloader = PackageLoader('m2000', 'templates')
     env = Environment(loader=fileloader)
     t = env.get_template('indicadores.html')
     yield PrintHtmlLandscape(t.render(context))
示例#7
0
 def test_import_from_with_context(self):
     env = Environment(loader=DictLoader(
         {"a": "{% macro x() %}{{ foobar }}{% endmacro %}"}))
     t = env.from_string(
         "{% set foobar = 42 %}{% from 'a' import x with context %}{{ x() }}"
     )
     assert t.render() == "42"
示例#8
0
 def test_cache_loader_change(self):
     loader1 = loaders.DictLoader({"foo": "one"})
     loader2 = loaders.DictLoader({"foo": "two"})
     env = Environment(loader=loader1, cache_size=2)
     assert env.get_template("foo").render() == "one"
     env.loader = loader2
     assert env.get_template("foo").render() == "two"
示例#9
0
 def test_prefix_loader(self, prefix_loader):
     env = Environment(loader=prefix_loader)
     tmpl = env.get_template("a/test.html")
     assert tmpl.render().strip() == "BAR"
     tmpl = env.get_template("b/justdict.html")
     assert tmpl.render().strip() == "FOO"
     pytest.raises(TemplateNotFound, env.get_template, "missing")
示例#10
0
 def model_run(self, model_context):
     context = self._build_context(model_context)
     # mostrar el reporte
     fileloader = PackageLoader('m2000', 'templates')
     env = Environment(loader=fileloader)
     t = env.get_template('cartera_finalizados_sin_saldar.html')
     yield PrintHtml(t.render(context))
示例#11
0
 def test_raw3(self, env):
     # The second newline after baz exists because it is AFTER the
     # {% raw %} and is ignored.
     env = Environment(lstrip_blocks=True, trim_blocks=True)
     tmpl = env.from_string(
         "bar\n{% raw %}\n  {{baz}}2 spaces\n{% endraw %}\nfoo")
     assert tmpl.render(baz="test") == "bar\n\n  {{baz}}2 spaces\nfoo"
示例#12
0
 def test_weird_inline_comment(self, env):
     env = Environment(line_statement_prefix="%")
     pytest.raises(
         TemplateSyntaxError,
         env.from_string,
         "% for item in seq {# missing #}\n...% endfor",
     )
示例#13
0
    def test_scopes_and_blocks(self):
        env = Environment(
            loader=DictLoader({
                "a.html": """
                {%- set foo = 'bar' -%}
                {% include 'x.html' -%}
            """,
                "b.html": """
                {%- set foo = 'bar' -%}
                {% block test %}{% include 'x.html' %}{% endblock -%}
                """,
                "c.html": """
                {%- set foo = 'bar' -%}
                {% block test %}{% set foo = foo
                    %}{% include 'x.html' %}{% endblock -%}
            """,
                "x.html": """{{ foo }}|{{ test }}""",
            }))

        a = env.get_template("a.html")
        b = env.get_template("b.html")
        c = env.get_template("c.html")

        assert a.render(test="x").strip() == "bar|x"
        assert b.render(test="x").strip() == "bar|x"
        assert c.render(test="x").strip() == "bar|x"
示例#14
0
文件: test_ext.py 项目: sahwar/jinja
    def test_overlay_scopes(self):
        class MagicScopeExtension(Extension):
            tags = set(["overlay"])

            def parse(self, parser):
                node = nodes.OverlayScope(lineno=next(parser.stream).lineno)
                node.body = list(
                    parser.parse_statements(("name:endoverlay", ),
                                            drop_needle=True))
                node.context = self.call_method("get_scope")
                return node

            def get_scope(self):
                return {"x": [1, 2, 3]}

        env = Environment(extensions=[MagicScopeExtension])

        tmpl = env.from_string("""
            {{- x }}|{% set z = 99 %}
            {%- overlay %}
                {{- y }}|{{ z }}|{% for item in x %}[{{ item }}]{% endfor %}
            {%- endoverlay %}|
            {{- x -}}
        """)
        assert tmpl.render(x=42, y=23) == "42|23|99|[1][2][3]|42"
示例#15
0
文件: _jinja.py 项目: wiless/IMTAphy
def babel_extract(fileobj, keywords, comment_tags, options):
    """
    Simple extractor to get some basic Babel support.
    """
    env = Environment()
    for lineno, sg, pl in env.get_translations_for_string(fileobj.read()):
        yield lineno, None, (sg, pl), ''
示例#16
0
文件: test_ext.py 项目: sahwar/jinja
    def test_debug(self):
        env = Environment(extensions=["jinja.ext.debug"])
        t = env.from_string("Hello\n{% debug %}\nGoodbye")
        out = t.render()

        for value in ("context", "cycler", "filters", "abs", "tests", "!="):
            assert "'{}'".format(value) in out
示例#17
0
文件: test_ext.py 项目: sahwar/jinja
 def test_nonvolatile(self):
     env = Environment(extensions=["jinja.ext.autoescape"], autoescape=True)
     tmpl = env.from_string('{{ {"foo": "<test>"}|xmlattr|escape }}')
     assert tmpl.render() == ' foo="&lt;test&gt;"'
     tmpl = env.from_string('{% autoescape false %}{{ {"foo": "<test>"}'
                            "|xmlattr|escape }}{% endautoescape %}")
     assert tmpl.render() == " foo=&#34;&amp;lt;test&amp;gt;&#34;"
示例#18
0
 def test_scoped_block_after_inheritance(self, env):
     env = Environment(loader=DictLoader({
         "layout.html":
         """
         {% block useless %}{% endblock %}
         """,
         "index.html":
         """
         {%- extends 'layout.html' %}
         {% from 'helpers.html' import foo with context %}
         {% block useless %}
             {% for x in [1, 2, 3] %}
                 {% block testing scoped %}
                     {{ foo(x) }}
                 {% endblock %}
             {% endfor %}
         {% endblock %}
         """,
         "helpers.html":
         """
         {% macro foo(x) %}{{ the_foo + x }}{% endmacro %}
         """,
     }))
     rv = env.get_template("index.html").render(the_foo=42).split()
     assert rv == ["43", "44", "45"]
示例#19
0
 def test_raw4(self, env):
     # The trailing dash of the {% raw -%} cleans both the spaces and
     # newlines up to the first character of data.
     env = Environment(lstrip_blocks=True, trim_blocks=False)
     tmpl = env.from_string(
         "bar\n{%- raw -%}\n\n  \n  2 spaces\n space{%- endraw -%}\nfoo")
     assert tmpl.render() == "bar2 spaces\n spacefoo"
示例#20
0
 def test_choice_loader(self, choice_loader):
     env = Environment(loader=choice_loader)
     tmpl = env.get_template("justdict.html")
     assert tmpl.render().strip() == "FOO"
     tmpl = env.get_template("test.html")
     assert tmpl.render().strip() == "BAR"
     pytest.raises(TemplateNotFound, env.get_template, "missing.html")
示例#21
0
 def test_lstrip_blocks_false_with_no_lstrip(self, env):
     # Test that + is a NOP (but does not cause an error) if lstrip_blocks=False
     env = Environment(lstrip_blocks=False, trim_blocks=False)
     tmpl = env.from_string("""    {% if True %}\n    {% endif %}""")
     assert tmpl.render() == "    \n    "
     tmpl = env.from_string("""    {%+ if True %}\n    {%+ endif %}""")
     assert tmpl.render() == "    \n    "
示例#22
0
 def test_set_and_include(self):
     env = Environment(loader=DictLoader(
         {
             "inc": "bar",
             "main": '{% set foo = "foo" %}{{ foo }}{% include "inc" %}',
         }))
     assert env.get_template("main").render() == "foobar"
示例#23
0
文件: test_ext.py 项目: sahwar/jinja
    def test_basic_scope_behavior(self):
        # This is what the old with statement compiled down to
        class ScopeExt(Extension):
            tags = set(["scope"])

            def parse(self, parser):
                node = nodes.Scope(lineno=next(parser.stream).lineno)
                assignments = []
                while parser.stream.current.type != "block_end":
                    lineno = parser.stream.current.lineno
                    if assignments:
                        parser.stream.expect("comma")
                    target = parser.parse_assign_target()
                    parser.stream.expect("assign")
                    expr = parser.parse_expression()
                    assignments.append(
                        nodes.Assign(target, expr, lineno=lineno))
                node.body = assignments + list(
                    parser.parse_statements(
                        ("name:endscope", ), drop_needle=True))
                return node

        env = Environment(extensions=[ScopeExt])
        tmpl = env.from_string("""\
        {%- scope a=1, b=2, c=b, d=e, e=5 -%}
            {{ a }}|{{ b }}|{{ c }}|{{ d }}|{{ e }}
        {%- endscope -%}
        """)
        assert tmpl.render(b=3, e=4) == "1|2|2|4|5"
示例#24
0
    def test_erb_syntax(self, env):
        env = Environment("<%", "%>", "<%=", "%>", "<%#", "%>")
        tmpl = env.from_string("""\
<%# I'm a comment, I'm not interesting %>\
<% for item in seq -%>
    <%= item %>
<%- endfor %>""")
        assert tmpl.render(seq=list(range(5))) == "01234"
示例#25
0
文件: test_ext.py 项目: sahwar/jinja
 def test_do(self):
     env = Environment(extensions=["jinja.ext.do"])
     tmpl = env.from_string("""
         {%- set items = [] %}
         {%- for char in "foo" %}
             {%- do items.append(loop.index0 ~ char) %}
         {%- endfor %}{{ items|join(', ') }}""")
     assert tmpl.render() == "0f, 1o, 2o"
示例#26
0
    def test_comment_syntax(self, env):
        env = Environment("<!--", "-->", "${", "}", "<!--#", "-->")
        tmpl = env.from_string("""\
<!--# I'm a comment, I'm not interesting -->\
<!-- for item in seq --->
    ${item}
<!--- endfor -->""")
        assert tmpl.render(seq=list(range(5))) == "01234"
示例#27
0
 def test_loop_include(self):
     env = Environment(loader=DictLoader({
         "inc":
         "{{ i }}",
         "main":
         '{% for i in [1, 2, 3] %}{% include "inc" %}{% endfor %}',
     }))
     assert env.get_template("main").render() == "123"
示例#28
0
 def test_urlize_rel_policy(self):
     env = Environment()
     env.policies["urlize.rel"] = None
     tmpl = env.from_string(
         '{{ "foo http://www.example.com/ bar"|urlize }}')
     assert tmpl.render() == (
         'foo <a href="http://www.example.com/">http://www.example.com/</a> bar'
     )
示例#29
0
 def test_include(self, env_trim):
     env_trim = Environment(
         loader=DictLoader(
             {"include": "{% macro test(foo) %}[{{ foo }}]{% endmacro %}"}
         )
     )
     tmpl = env_trim.from_string('{% from "include" import test %}{{ test("foo") }}')
     assert tmpl.render() == "[foo]"
示例#30
0
    def test_php_syntax(self, env):
        env = Environment("<?", "?>", "<?=", "?>", "<!--", "-->")
        tmpl = env.from_string("""\
<!-- I'm a comment, I'm not interesting -->\
<? for item in seq -?>
    <?= item ?>
<?- endfor ?>""")
        assert tmpl.render(seq=list(range(5))) == "01234"