Fehler: Jinja was looking for the following tags...

Django, Flask, Bottle, WSGI, CGI…
Antworten
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Hallo,
ich erstelle mit Flask nen webserver. Beim aufrufen einer Internetseite scheint es ein Problem mit dem Template zu geben.
Scheinbar findet Jinja den {% endif %}-Tag nicht, obwohl er vorhanden ist. Leider finde ich den Fehler nicht. Der Fehler tritt nur auf, wenn ich noch ein ist-group-item hinzufüge. (Die genaue Stelle ist im Code mit /* when adding a new list-group-item or anything else here, I get the error*/ beschrieben)
Der Fehler:

Code: Alles auswählen

jinja2.exceptions.TemplateSyntaxError: Unexpected end of template. Jinja was looking for the following tags: 'endif'. The innermost block that needs to be closed is 'if'.

Der volle Traceback ist ein bisschen länger, daher hänge ich ihn ans Ende der Request.

Der Code (unwichtige Parts mit .... abgekürzt):

Code: Alles auswählen

<head>
  <title>...</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <link rel="stylesheet" href="{{ url_for('static', filename='bootstrap.min.css') }}">
  <link rel="stylesheet" href="{{ url_for('static', filename='main.css') }}">
  <script src="{{ url_for('static', filename='jquery-3.3.1.min.js')}}"></script>
  <script src="{{ url_for('static', filename='bootstrap.min.js')}}"></script>
</head>
<body>
<nav class="navbar navbar-light bg-light navbar-expand-sm">...</nav>

<div class="container-fluid">
  <div class="row justify-content-md-center">
    <div class="col-md-10 col-sm-12">
    <h2>...</h2>
    <p>
      ...
    </p>
    {% if gold %} // true if all required files exists
    <ul class="list-group" id="mainContentBox">
      <li class="list-group-item list-group-item-secondary">
        <h5>...</h5>
      </li>
      <li class="list-group-item">
        <div class="form-group">
          ...
        </div>
      </li>
      <li class="list-group-item">
        <label for="userRole">...</label>
        <div class="input-group">
          ...
        </div>
      </li>
      {% if st["telegram_established"] == false %} // unnecessary for this problem, i think
      <li class="list-group-item">
        <div class="alert alert-info" role="alert">
          ...
        </div>
      </li>
      {% else %}
      <li class="list-group-item">
        <div class="form-group">
            ...
        </div>
      </li>
      {% endif %}
      <li class="list-group-item list-group-item-secondary">
        <h5>...</h5>
      </li>
      <li class="list-group-item">
        <div class="form-group">
          ...
        </div>
      </li>
      <li class="list-group-item">
        <div class="form-group">
          ...
        </div>
      </li>
      <li class="list-group-item">
        <div class="form-group">
          ...
        </div>
      </li>
        
        /* 
        
        when adding a new list-group-item or anything else here, I get the error
        
        */
        
    </ul>
    <br />
    <a class="btn btn-success btn-lg float-right mb-3 ml-3" role="button" id="button_execute" onclick="finalizeConfig()">...</a>

    {% else %}
    <div class="alert alert-danger" role="alert">
      <h5>...</h5>
      <p>
        ...
      </p>
    </div>
    <br />
    {% endif %}
  </div>
</div>
<script src="{{ url_for('static', filename='main_setupUser.js')}}"></script>
</div>
</body>
Danke für Eure Bemühungen!

Jakob


Hier nochmal der ausführliche Fehler

Code: Alles auswählen

ERROR:flask.app:Exception on /setupUser [GET]
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3/dist-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/lib/python3/dist-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/pi/Desktop/Jarvis-onworking/Jarvis/wb_server.py", line 107, in setupUser
    return render_template("setupUser.html", nav=nav, st=standards, gold=gold)
  File "/usr/lib/python3/dist-packages/flask/templating.py", line 134, in render_template
    return _render(ctx.app.jinja_env.get_or_select_template(template_name_or_list),
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 869, in get_or_select_template
    return self.get_template(template_name_or_list, parent, globals)
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 830, in get_template
    return self._load_template(name, self.make_globals(globals))
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 804, in _load_template
    template = self.loader.load(self, name, globals)
  File "/usr/lib/python3/dist-packages/jinja2/loaders.py", line 125, in load
    code = environment.compile(source, name, filename)
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 591, in compile
    self.handle_exception(exc_info, source_hint=source_hint)
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/lib/python3/dist-packages/jinja2/_compat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "/home/pi/Desktop/Jarvis-onworking/Jarvis/webserver/template/setupUser.html", line 111, in template
    {% else %}
  File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 497, in _parse
    return Parser(self, source, name, encode_filename(filename)).parse()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 901, in parse
    result = nodes.Template(self.subparse(), lineno=1)
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 883, in subparse
    rv = self.parse_statement()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 130, in parse_statement
    return getattr(self, 'parse_' + self.stream.current.value)()
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 223, in parse_if
    drop_needle=True)
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 170, in parse_statements
    self.fail_eof(end_tokens)
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 104, in fail_eof
    return self._fail_ut_eof(None, stack, lineno)
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 90, in _fail_ut_eof
    self.fail(' '.join(message), lineno)
  File "/usr/lib/python3/dist-packages/jinja2/parser.py", line 59, in fail
    raise exc(msg, lineno, self.name, self.filename)
jinja2.exceptions.TemplateSyntaxError: Unexpected end of template. Jinja was looking for the following tags: 'endif'. The innermost block that needs to be closed is 'if'.

LukeNukem
User
Beiträge: 232
Registriert: Mittwoch 19. Mai 2021, 03:40

JakobPrie hat geschrieben: Mittwoch 26. Mai 2021, 13:08 ich erstelle mit Flask nen webserver. Beim aufrufen einer Internetseite scheint es ein Problem mit dem Template zu geben.
Scheinbar findet Jinja den {% endif %}-Tag nicht, obwohl er vorhanden ist. Leider finde ich den Fehler nicht. Der Fehler tritt nur auf, wenn ich noch ein ist-group-item hinzufüge. (Die genaue Stelle ist im Code mit /* when adding a new list-group-item or anything else here, I get the error*/ beschrieben)
Der Fehler:

Code: Alles auswählen

jinja2.exceptions.TemplateSyntaxError: Unexpected end of template. Jinja was looking for the following tags: 'endif'. The innermost block that needs to be closed is 'if'.
Es ist zwar löblich, daß Du uns entgegenkommen möchtest und Dein Template einkürzt, daber leider gehen dadurch die Zeilenangaben verloren. Angesichts Deines Stacktrace würde ich mal rund um Zeile 110 schauen, warum Jinja2 da wegen des {% else %} meckert; vielleicht magst Du auch einmal das komplette Template anhängen oder -- vielleicht noch besser -- bei einem Filehoster hochladen und einen Link dazu posten.
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Danke für die schnelle Antwort!
Ich habe jetzt nochmal zur Übersicht alle Textzeilen durch ... ersetzt. Dadurch sollten die Zeilen beibehalten werden und die Übersicht dennoch gegeben sein.
Hier einmal der Link: https://mega.nz/file/95hWnbZR#UfEUcLjok ... XhXWwkTEyQ

und für alle die den Code hier haben wollen:

Code: Alles auswählen

<head>
  <title>...</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <link rel="stylesheet" href="{{ url_for('static', filename='bootstrap.min.css') }}">
  <link rel="stylesheet" href="{{ url_for('static', filename='main.css') }}">
  <script src="{{ url_for('static', filename='jquery-3.3.1.min.js')}}"></script>
  <script src="{{ url_for('static', filename='bootstrap.min.js')}}"></script>
</head>
<body>
<nav class="navbar navbar-dark bg-dark navbar-expand-sm">
  <a class="navbar-brand" href="/index">...</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#mainNav" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="mainNav">
      <ul class="nav">
      {% for item in nav %}
          <li class="nav-item text-muted"><a class="nav-link" href="{{item.href}}">{{ item.text }}</a></li>
      {% endfor %}
      </ul>
    </div>
</nav>
<div class="container-fluid">
  <div class="row justify-content-md-center">
    <div class="col-md-10 col-sm-12">
    <h2>...</h2>
    <p>
      ...
        ...
        ...
        ...
    </p>
    {% if gold %}
    <ul class="list-group" id="mainContentBox">
      <li class="list-group-item list-group-item-secondary">
        <h5>...</h5>
      </li>
      <li class="list-group-item">
        <div class="form-group">
          <label for="userName">...</label>
          <input type="text" class="form-control" id="userName" placeholder="z.B. max, klaus, heinz, matrix" value="{{ st["userName"] }}">
        </div>
        <small class="form-text text-muted">...</small>
        <div id="alert-box"></div>
      </li>
      <li class="list-group-item">
        <label for="userRole">...</label>
        <div class="input-group">
          <button class="btn btn-success mr-3" id="useFaceRecButtonTrue" onclick="$('#userRole').val('USER')">...</button>
          <button class="btn btn-warning mr-3" id="useFaceRecButtonFalse" onclick="$('#userRole').val('ADMIN')">...</button>
          <input type="text" class="form-control disabled" disabled id="userRole" value="{{ "USER" if st["useInterface"] == "USER" else "ADMIN" }}"></input>
        </div>
        <small class="form-text text-muted">...</small>
      </li>
      {% if st["telegram_established"] == false %}
      <li class="list-group-item">
        <div class="alert alert-info" role="alert">
          <h5>...</h5>
          <p>
            ...
            ...
          </p>
        </div>
      </li>
      {% else %}
      <li class="list-group-item">
        <div class="form-group">
          <label for="userTelegram">...</label>
          <input type="number" class="form-control" id="userTelegram" placeholder="" value="{{st["userTelegram"]}}" min="0">
          <small class="form-text text-muted">...</small>
        </div>
      </li>
      {% endif %}
      <li class="list-group-item list-group-item-secondary">
        <h5>...</h5>
      </li>
      <li class="list-group-item">
        <div class="form-group">
          <label for="userFullName">...</label>
          <input type="text" class="form-control" id="userFullName" placeholder="z.B. Max, Klaus, Heinz" value="{{st["userFullName"]}}">
        </div>
      </li>
      <li class="list-group-item">
        <div class="form-group">
          <label for="userFullName">...</label>
          <input type="text" class="form-control" id="userFullLastName" placeholder="z.B. Mustermann, Maier, Müller" value="{{st["userFullLastName"]}}">
        </div>
      </li>
      <li class="list-group-item">
        <div class="form-group">
          <label for="userBirth">...</label>
          <div class="input-group">
            <input type="number" class="form-control" id="userBirthDay" placeholder="DD" value="{{st["userBirthDay"]}}" min="1" max="31">
            <input type="number" class="form-control" id="userBirthMonth" placeholder="MM" value="{{st["userBirthMonth"]}}" min="1" max="12">
            <input type="number" class="form-control" id="userBirthYear" placeholder="YYYY" value="{{st["userBirthYear"]}}" min="1900">
          </div>
          <small class="form-text text-muted">...</small>
        </div>
      </li>
      <li class="list-group-item">
        <div class="form-group">
          <label for="userFullName">...</label>
          <input type="text" class="form-control" id="userFullLastName" placeholder="z.B. Mustermann, Maier, Müller" value="{{st["userFullLastName"]}}">
        </div>
      </li>
    </ul>
    <br />
    <a class="btn btn-success btn-lg float-right mb-3 ml-3" role="button" id="button_execute" onclick="finalizeConfig()">Speichern und zurück zur Übersicht</a>

    {% else %}
    <div class="alert alert-danger" role="alert">
      <h5>Achtung!</h5>
      <p>
        Die <b>nötigen Dateien</b> für diesen Setup-Schritt konnten <b>nicht gefunden</b> werden.
        Bitte lade das System erneut herunter und starte die Einrichtung neu!
      </p>
    </div>
    <br />
    {% endif %}
  </div>
</div>
<script src="{{ url_for('static', filename='main_setupUser.js')}}"></script>
</div>
</body>

Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@JakobPrie: Das reicht nicht, den *das* Template kann ich hier zumindest problemlos laden und rendern. Zeig mal wie man damit den Fehler auslösen kann.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten