Как я могу отобразить mysql содержание, используя 2 для циклов flask jinja2 - PullRequest
0 голосов
/ 03 мая 2020

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

from flask import Flask,request,render_template,redirect,url_for,session,logging,flash,send_from_directory
from flask_sqlalchemy import SQLAlchemy
import pymysql
pymysql.install_as_MySQLdb()
from flask_mail import Mail
app = Flask(__name__)
import os

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost/akashauto'
db = SQLAlchemy(app)    
class Upload_tb(db.Model):
    snob = db.Column(db.Integer, primary_key=True)
    commentb = db.Column(db.String(20), unique=True, nullable=False)
    datab = db.Column(db.String(20), unique=True, nullable=False)

APP_ROOT=os.path.dirname(os.path.abspath(__file__))
@app.route("/plcpro")
def problem():
    return  render_template("plcpro.html")




@app.route("/uploader",methods=["GET","POST"])
def uploader():
    target=os.path.join(APP_ROOT,"images/")
    print(target)
    if not os.path.isdir(target):  #if folder does not exist . create a folder
        os.mkdir(target)
    if(request.method=='POST'):
        f=request.files['file1']
        text=request.form.get('comment')
        filename=f.filename
        f.save(os.path.join(target,filename))
        image=os.listdir('./images')
        existing_entry=Upload_tb.query.filter_by(commentb=text).first()
        if existing_entry:
            # flash('Email already exist','danger')
            return redirect(url_for("plcove"))
        new_entry=Upload_tb(commentb=text,datab=filename)
        db.session.add(new_entry)
        db.session.commit()
        question=Upload_tb.query.all()
    return render_template('ans.html',file=filename,text=text,image=image,question=question)
@app.route("/uploader/<filename>")
def send_img(filename):
    return send_from_directory("images",filename)

Это код формы

      <form id="upload-form" action="/uploader" method="POST" enctype="multipart/form-data" onsubmit=" return askvalidateform()">
        <div class="form-group">
            <label for="name">Enter Name:</label>
            <input type="text" class="form-control" id="name" name="name" placeholder="Enter your name">
            <span id="nameerror" class="text-danger"></span>
          </div>

          <div class="form-group">
            <label for="comment">Ask Your Question: </label>
            <textarea rows="5" cols="30" class="form-control " id="comment" name="comment"
              placeholder="Ask Question"></textarea>
            <span id="commenterror" class="text-danger"></span>
          </div>
        <input type="file" name="file1" accept="image/" multiple>
        <input type="submit" value="send">
        </form>

отображать код

  {% for image_name in image %}
             <li class="list"><img src="{{url_for('send_img',filename=image_name)}}"></li>
{%endfor%}
<p class="para">{% for user in question %}</p>
             <li class="list">Comment - {{user.commentb}}</li>

{% endfor %}

Вывод, который я получаю введите описание изображения здесь

1-е изображение отображается, а затем комментирует то, что я хочу отобразить Это изображение и его комментарий вместе, так что я могу сделать некоторые изменения для l oop? Любая помощь будет оценена

1 Ответ

0 голосов
/ 03 мая 2020

Вы можете использовать этот метод. Итерация по массиву и доступ к значениям.

{% for i in range(image|lenght)%}
<p> {{question[i].commentb }} </p>
<img src='url_for("send_image",filename=images[i])}}'>
{% endfor %}
...