[已解决]Watchlist项目中,从数据库取值失败

flask-sqlalchemy

#1

日常艾特大佬
@greyli
@AngelLiang

Mysql数据库,数据库通讯没问题,flask run可以联通数据库,且可以创建预设的表及预设的字段和字段中的数据

程序文件为webapp.py,视图模版文件为movielist.html
movielist.html中"local_sum_movielist""local_title_movielist"两个变量已经在webapp.py中的 app.context_processor 装饰器注册

想解决的问题: 从表"movielistp"中,取字段"title"和字段"year"下所有的数据,显示到下图中的红框内
image
目前的问题是,下面这两行代码(webapp.py),取出的值是表二:movielistp中,字段"id"的四个值,9.10.11.12

    get_title_movielistp = Movielist.query.filter_by(movieusersp_id=5).all()
    print(get_title_movielistp)

我是想显示image 红框中的这八个内容

:slight_smile:我感觉我已经尽力了…

表一:movieusersp

表二:movielistp

movieusersp表中的"id"字段对应着movielistp表中的"movieusersp_id"字段
表一:movieusersp图示如下:
image
表二:movielistp图示如下:
image

萌新代码展示

1.webapp.py
@app.route('/')               是用作向数据库中写入数据
@app.context_processor       是装饰器,给模版提供需要使用的变量
@app.route('/movielist')     视图模版文件,就是显示,显示电影清单这个页面,上面有大图的那个
@app.route('/login')         不在本帖问题范围,不用管
@app.errorhandler(404)       不在本帖问题范围,不用管

@app.route('/')
def hello():
    # 找到电影名为xxx的用户
    # movielist = Movielist.query.filter(Movielist.title=='电影1').first()
    # print(movielist.movieusers_id_get.username)
    # 增加
    movieusers1 = Movieusers(username='大灰狼', userrole='付费用户', useraccount='tcdhl', userpassword='888888')
    db.session.add(movieusers1)
    db.session.commit()

    movielist1 = Movielist(movieusersp_id=movieusers1.id, title='屌丝男士第一季', year='2016')
    movielist2 = Movielist(movieusersp_id=movieusers1.id, title='屌丝男士第二季', year='2017')
    movielist3 = Movielist(movieusersp_id=movieusers1.id, title='屌丝男士第三季', year='2018')
    movielist4 = Movielist(movieusersp_id=movieusers1.id, title='屌丝男士第四季', year='2019')
    db.session.add_all([movielist1, movielist2, movielist3, movielist4])
    db.session.commit()
    return 'hello'
    # 值插入完成后,取出关联用户名为"大灰狼"的ID的所有电影列表


@app.context_processor
def glocal_route_movielist():
    get_name_movieusersp = Movieusers.query.filter(Movieusers.username == '大灰狼').first_or_404()
    get_sum_movielistp = Movielist.query.filter(Movielist.id).count()
    get_title_movielistp = Movielist.query.filter_by(movieusersp_id=5).all()
    print(get_title_movielistp)
    return dict(
        local_name_movieusers=get_name_movieusersp.username,
        local_sum_movielist=get_sum_movielistp,
        local_title_movielist=get_title_movielistp
    )


@app.route('/movielist')
def movielist():
    # 查询
    # getmovieusers = Movieusers.query.filter(Movieusers.username == 'tc_dhl').first()
    # getmovietitle = Movielist.query.filter(Movielist.title == '电影1').first()
    getmovieyears = Movielist.query.filter(Movielist.year == '2016').first()
    return render_template(
        't_view/movielist.html',
        # localusername=getmovieusers.username,
        # localid=getmovietitle.title,
        # localyear=getmovieyears.year
    )


@app.route('/login')
def login():
    return render_template('t_view/login.html')


@app.errorhandler(404)
def page_not_found(error_404):
    return render_template('t_base/error_404.html'), 404

2.movielist.html

{% extends "t_base/subjectbase.html" %}

{% block static %}
    <link rel="stylesheet" href="{{ url_for('static', filename='effect/t_view.css') }}" />
{% endblock %}

{% block title -%}
    用户中心
{%- endblock %}

{% block contents %}
    <h4>总计收藏 {{ local_sum_movielist }} 部电影</h4>
    <ul class="movie-list">
        {% for getmovielist in local_title_movielist %}
        <li>{{ getmovielist }}</li>
        {% endfor %}
    </ul>
{% endblock %}

#2

如果理解没错的话,你把问题搞复杂了。如果你是想显示记录的字段值,可以直接在模板里使用点去调用属性:

<ul class="movie-list">
    {% for movielist in local_title_movielist %}
    <li>{{ movielist.title }} - {{ movielist.year }}</li>
    {% endfor %}
</ul>

#3

卧槽成了,辉哥牛逼…多谢!!!