Including two templates that import the same macros under the same name causes an exception
Rendering this template:
{% extends "page" %}
{% block content %}
<div class="singleColumn">
{% include 'login_form' %}
<h2>{{ serverDisplayName }}</h2>
<p>{{ serverDescription | raw }}</p>
{% if signupMode=='OPEN' or signupMode=='INVITE_ONLY' %}
{% include 'register_form' %}
{% elseif signupMode=='CLOSED' %}
<div class="notMuchContent" align="center">{{ L('signups_closed') }}</div>
{% endif %}
</div>
{% endblock %}
login_form.twig:
{% import "forms" as form %}
<h2>{{ L('login_title') }}</h2>
<form action="/account/login{{ additionalParams }}" method="post">
{{ form.start('login', message) }}
{{ form.textInput('username', L('email_or_username')) }}
...
register_form.twig:
{% import "forms" as form %}
<form action="/account/register" method="post">
{% if preFilledInvite is not null %}
...
Causes this exception:
com.mitchellbosecke.pebble.error.PebbleException: More than one named template can not share the same name: form (?:?)
at com.mitchellbosecke.pebble.template.EvaluationContextImpl.addNamedImportedTemplates(EvaluationContextImpl.java:163)
at com.mitchellbosecke.pebble.template.PebbleTemplateImpl.importNamedTemplate(PebbleTemplateImpl.java:230)
at com.mitchellbosecke.pebble.node.ImportNode.render(ImportNode.java:33)
at com.mitchellbosecke.pebble.node.BodyNode.render(BodyNode.java:43)
at com.mitchellbosecke.pebble.node.RootNode.render(RootNode.java:30)
at com.mitchellbosecke.pebble.template.PebbleTemplateImpl.evaluate(PebbleTemplateImpl.java:155)
at com.mitchellbosecke.pebble.template.PebbleTemplateImpl.includeTemplate(PebbleTemplateImpl.java:279)
at com.mitchellbosecke.pebble.node.IncludeNode.render(IncludeNode.java:50)
at com.mitchellbosecke.pebble.node.BodyNode.render(BodyNode.java:43)
at com.mitchellbosecke.pebble.node.IfNode.render(IfNode.java:81)
at com.mitchellbosecke.pebble.node.BodyNode.render(BodyNode.java:43)
at com.mitchellbosecke.pebble.node.BlockNode$1.evaluate(BlockNode.java:56)
at com.mitchellbosecke.pebble.template.PebbleTemplateImpl.block(PebbleTemplateImpl.java:440)
at com.mitchellbosecke.pebble.template.PebbleTemplateImpl.block(PebbleTemplateImpl.java:434)
at com.mitchellbosecke.pebble.node.BlockNode.render(BlockNode.java:37)
at com.mitchellbosecke.pebble.node.BodyNode.render(BodyNode.java:43)
at com.mitchellbosecke.pebble.node.RootNode.render(RootNode.java:30)
at com.mitchellbosecke.pebble.template.PebbleTemplateImpl.evaluate(PebbleTemplateImpl.java:155)
at com.mitchellbosecke.pebble.template.PebbleTemplateImpl.evaluate(PebbleTemplateImpl.java:166)
at com.mitchellbosecke.pebble.template.PebbleTemplateImpl.evaluate(PebbleTemplateImpl.java:104)
at smithereen.templates.RenderedTemplateResponse.renderToWriter(RenderedTemplateResponse.java:39)
at smithereen.templates.RenderedTemplateResponse.renderToString(RenderedTemplateResponse.java:46)
at smithereen.Main.indexPage(Main.java:289)
at spark.RouteImpl$1.handle(RouteImpl.java:72)
at spark.http.matching.Routes.execute(Routes.java:61)
at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:134)
at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1671)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:505)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:698)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:804)
at java.base/java.lang.Thread.run(Thread.java:830)
Isn't {% import %} only supposed to import within the template where it is written? It feels illogical that these imports propagate upwards from the included template into the root one, and then back into another include where they then have the potential to cause a name conflict.
Can confirm, two completely different contexts that used the same import name caused this error. Only solution I know of is to use a different name or no name...
Only solution I know of is to use a different name or no name...
Yes, I ended up renaming it to _form in the login template and of course it worked.