2017-02-01 4 views
0

EDIT: упростить цикл for, чтобы упростить иллюстрацию проблемы, но проблема остается прежней.Python фляга jinja2 шаблоны переменных контекста. Невозможно отобразить переменные

Я пытаюсь получить визуализацию флага jinja2, чтобы отобразить карусель изображений из списка имен изображений. В моем отладчике отображается переменная images, и, похоже, она проходит через нее, когда я нахожу ее, но по какой-то причине это не рендеринг.

# flask app file 
@app.route('/results', methods=['POST', 'GET']) 
@login_required 
def newpage(page=1): 
    """ 
    Renders search page 
    """ 
    form = genus_form() 
    user = current_user 
    if request.method == 'POST': 
     if form.validate_on_submit(): 
      gen = Genus.query.filter(Genus.genus_name.like(form.genus.data)).first() 
      spec = Species.query.filter_by(GID=gen.GID).first() 
      images = Images.query.filter_by(UID=spec.UID).all() 
      if images: 
       images = [i.FileName for i in images] 
      form.genus.data = '' 
      render_template('results.html', form=form, images=images) 
     else: 
      return render_template('results.html', form=form) 
    return render_template('results.html', form=form) 

Вот соответствующий раздел из шаблона джинджа:

{% extends 'base.html' %} 
{% block title %} WCTC Image Review {% endblock %} 
{% block scripts %} 
    {{ super() }} 
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
<script> 

$(document).ready(function() { 

    $("#genus").autocomplete({ 
     delay: 100, 
     source: function (request, response) { 

      // Suggest URL 
      var suggestURL = "{{ url_for('autocomplete') }}?term=%QUERY"; 
      suggestURL = suggestURL.replace('%QUERY', request.term); 

      // JSON Request 
      $.ajax({ 
       method: 'GET', 
       dataType: 'json', 
       jsonCallback: 'jsonCallback', 
       url: suggestURL 
      }) 
      .success(function(data){ 
       response(data); 
      }); 
     } 
    }); 
}); 

$('#myCarousel').carousel({ 
    interval: 40000 
}); 

$('.carousel .item').each(function(){ 
    var next = $(this).next(); 
    if (!next.length) { 
    next = $(this).siblings(':first'); 
    } 
    next.children(':first-child').clone().appendTo($(this)); 

    if (next.next().length>0) { 
     next.next().children(':first-child').clone().appendTo($(this)).addClass('rightest'); 

    } 
    else { 
     $(this).siblings(':first').children(':first-child').clone().appendTo($(this)); 

    } 
}); 

</script> 
{% endblock %} 
{% block content %} 

<div> 
    <form action="/results" method="POST" id="search"> 
     <fieldset> 
      <div> 
       {{ form.genus(placeholder="Genus") }} 
      </div> 
      <div> 
       <button type="submit" class="btn btn-default">Submit</button> 
      </div> 
     </fieldset> 
    </form> 
</div> 
{% if images %} 
       {% for filename in images %} 
         <div> 
          {{ filename }} 
         </div> 
       {% endfor %} 
{% endif %} 
{% endblock %} 

Любая помощь будет принята с благодарностью.

+0

Не могли бы вы показать свою полную функцию маршрута, пожалуйста? – MrLeeh

+0

Отредактировано для отображения полного маршрута. –

+0

Я следил за ним с помощью отладчика, и он определенно ведет себя так, как я ожидаю, передает список изображений в шаблон, поскольку переменные изображения и переменная изображений отображаются в отладчике, но затем он просто не отображает что-либо внутри блока {% if images%}. –

ответ

1

return Добавить к этой линии:

return render_template('results.html', form=form, images=images) 

и шаблон должен нравится:

{% if images %} 
    {% for filename in images %} 
     <div> 
      <img src="{{ filename }}"> 
     </div> 
    {% endfor %} 
{% endif %} 
+0

Ha! Это всегда что-то простое, не так ли! Спасибо! –

+0

Добро пожаловать! Примите мой ответ:) –

Смежные вопросы