jinja2.exceptions.TemplateSyntaxError: ожидаемый токен «конец блока операторов», полученный «show_jobs» - PullRequest
0 голосов
/ 12 января 2019

Я только начал изучать Python и застрял с этой ошибкой. Я занимаюсь обучением и по какой-то причине не могу найти причину этой ошибки.

Есть идеи? Вот сценарии, в которых найдено «show_jobs»:

index.html

{% extends "layout.html" %}
<!doctype html>
{% block content %}
  <div class="columns">
    <div class="column">
      <h1>Jobs</h1>
    </div>
    <div class="column is-one-fifth">
    </div>
  </div>
  {{ show_jobs(jobs) }}
{% endblock %}

layout.html

{% from '_macros.html' import show_job, import  with context %}
<!doctype html>
<html>
  <head>
    <title>Job Board</title>
    <link rel="stylesheet" href="{{ url_for('static',
    filename='css/bulma.min.css')}}">
    <link rel="stylesheet" href="{{ url_for('static',
    filename='css/app.css')}}">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css">
  </head>
  <body>
    <div class="container top">
      <div class="content">
        {% block content %}
        {% endblock %}
      </div>
    </div>
  </body>
</html>

macros.html

{% macro show_job(job) %}
    <div class="card adjust-height">
      <header class="card-header">
        <p class="card-header-title">
          <a href="">{{ job['title'] }}</a>
        </p>
      </header>
      <div class="card-content">
        <div class="content">
          <p>
            <a href="">{{ job['employer_name'] }}</a><br>
              ${{ job['salary'] }}</br>
              {{ job['description'] }}
          </p>
        </div>
      </div>
    </div>
      {% endmacro %}

      {% macro show_jobs(jobs) % }
      <div class="column is-multiline">
        {% for job in jobs %}
        <div class="column is-half">
          {{ show_job(job) }}
        </div>
      {% endmacro %}

Существует также app.py:

import sqlite3
from flask import Flask, render_template, g

PATH = 'db/jobs.sqlite'

app = Flask(__name__)

def open_connection():
    connection = getattr(g, '_connection', None)
    if connection == None:
        connection = g._connection = sqlite3.connect(PATH)
    connection.row_factory = sqlite3.Row
    return connection

def execute_sql(sql, values=(), commit=False, single=False):
    connection = open_connection()
    cursor = connection.execute(sql,values)
    if commit == True:
        results = connection.commit()
    else:
        results = cursor.fetchone() if single else cursor.fetchall()

    cursor.close()
    return results

@app.teardown_appcontext
def close_connection(exeption):
    connection = getattr(g, '_connection', None)
    if connection is not None:
        connection.close()

@app.route('/')
@app.route('/jobs')
def jobs():
    jobs = execute_sql('SELECT job.id, job.title, job.description, job.salary, employer.id as employer.name as employer_name FROM job JOIN employer ON employer.id = job.employer_id')
    return render_template('index.html', jobs=jobs)

Я пытался найти опечатки и следовал учебнику настолько хорошо, насколько это возможно, но, похоже, я не нашел решения для этого.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Похоже, что Тристо обнаружил вашу ошибку, но я заметил кое-что еще, что вы можете улучшить в своем коде.

При использовании макросов в Jinja2 могут возникнуть проблемы с пробелами, если вы не используете разделители {%- и -%}. Теперь, когда вы пишете свой макрос, вы включаете все пробелы (табуляции, пробелы, новые строки) в вывод макроса.

Вы можете найти больше информации здесь . Рассмотрите возможность включения lstrip_blocks и trim_blocks для вашего проекта поверх использования пробелов, удаляя разделители для ваших макросов и их вызовов.

0 голосов
/ 13 января 2019

В вашем macros.html есть пробел между % и } в строке 20, где не должно быть

...