@B1ackGh0st

Как передать имя пользователя в шаблон?

Добрый день. Не могу понять, как мне по id пользователя вывести его имя из таблицы и передать в шаблон.

{% for defect in pages.items %}
                <tr>
                  <td>{{ defect.id }}</td>
                  <td>{{ defect.equipment_id }}</td>
                  <td><a href="{{ url_for('defects.defect_detail', id=defect.id) }}">{{ defect.description }}</a></td>
                  <td>{{ defect.author_id }}</td>
                  <td>{{ defect.created }}</td>
                </tr>
              {% endfor %}


class Defect(UserMixin, Equipment, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    equipment_id = db.Column(db.Integer, db.ForeignKey('equipment.id'))
    description = db.Column(db.Text)
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    eliminated = db.Column(db.Integer())
    created = db.Column(db.DateTime, default=datetime.now())  # Дата создания

    def __init__(self, *args, **kwargs):
        super(Defect, self).__init__(*args, **kwargs)
        self.generate_slug()

    def generate_slug(self):
        if self.id:
            self.slug = slugify(self.id)

    def __repr__(self):
        return '<Post id: {}, title: {}>'.format(self.id, self.title)

@login.user_loader
def load_user(id):
    return User.query.get(int(id))

# http://localhost/defects/
@defects.route('/')
def index():

    page = request.args.get('page')
    if page and page.isdigit(): # Если переменная имеет значение и переменная является цифрой
        page = int(page) # Преобразуем переменную в цифру
    else: # Иначе ...
        page = 1 # Даем значение переменной 1

    defects = Defect.query.order_by(Defect.created.desc())

    # пагинация
    pages = defects.paginate(page=page, per_page=5)
    # Выводим шаблон
    return render_template('defects/index.html', defects=defects, pages=pages)


class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    surname = db.Column(db.String(64), index=True)
    name = db.Column(db.String(64), index=True)
    middle_name = db.Column(db.String(64), index=True)
    password_hash = db.Column(db.String(128))
    role = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic'))
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
planc
@planc
flask-sqlalchemy.pocoo.org/2.3/models/#one-to-many...

в User добавь

defects = db.relationship('Defect', backref=db.backref('author', lazy=True), lazy=True)


в шаблоне

defect.author.name

и в flask-sqlalchemy.pocoo.org/2.3/quickstart посмотри про joined


While lazy-loading a relationship is fast, it can easily become a major bottleneck when you end up triggering extra queries in a loop for more than a few objects. For this case, SQLAlchemy lets you override the loading strategy on the query level. If you wanted a single query to load all categories and their posts, you could do it like this:


query = Category.query.options(joinedload('posts'))

в class Defect не нужен UserMixin
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы