实现搜索功能

  1. 准备视图函数search()

  2. 修改base.html 中搜索输入框所在的
    1. <form action="{{ url_for('search') }}" method="get">
    2.    <input name="q" type="text" placeholder="请输入关键字">
      <!DOCTYPE html>
      <html>
      <head>
          <meta charset="utf-8">
          <title>{% block title%}car{% endblock %}</title>
          <link href="{{ url_for('static',filename='css/base.css') }}" rel="stylesheet" type="text/css">
          <link rel="stylesheet" href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css">
         <script src="{{ url_for('static',filename='js/base.js') }}"></script>
      {% block head %}
      
      
      {% endblock %}
          <style>
              nav navbar-nav li {
                  list_style: none;
                  float: left;
                  margin: 10px;
              }
      
              .nav1 li{
                      list-style: none;
                      float: left;
                      margin: 10px;
                  }
          </style>
      </head>
      <body id="mybody">
      <div class="daohang_box"><form action="{{ url_for('search')}}" method="get" >
      <nav class="navbar" role="navigation" style="">
          <div class="container-fluid" id="container">
              <div class="navbar-header">
                  <a class="navbar-brand" href="{{ url_for('index') }}">首页</a>
              </div>
              <div>
                  <ul class="nav navbar-nav">
                      {% if username %}
                          <li><a href={{ url_for('usercenter',user_id=session.get('userid'),tag=1) }}>{{ username }}</a></li>
                          <li><a href="{{ url_for('logout') }}">注销 </a></li>
                      {% else %}
                      <li><a href="{{ url_for('login') }}" onclick="">登录</a></li>
                      <li><a href="{{ url_for('regist') }}" onclick="">注册</a></li>
                      {% endif %}
                      <li><a href="{{ url_for('lable') }}" onclick="">发布问答</a></li>
                  </ul>
              </div>
             <div style="float: right">
                 <img style="width: 50px; height: 50px" id="myonoff" onclick="mySwitch()" src="https://ps.ssl.qhimg.com/sdmt/119_135_100/t01ebad6510c93738fc.gif" style="width:50px" >
             </div>
              <div><input id="search_box" name='q'type="text" placeholder="请输入关键词查找">
              <button id="search" type="submit">搜索</button>
      
              </div>
      {#    <body background="http://p5.so.qhimgs1.com/bdr/_240_/t01fb87f1928a69d5eb.jpg" style="width: 100%; height: 100%"></body>#}
      
          </div>
      </nav>
      </form>
      {% block main %}{% endblock %}
      
      </body >
      </html>
      </body>

       

  3. 完成视图函数search()
    1. 获取搜索关键字
      q = request.args.get('q’)
    2. 条件查询
      qu = Question.query.filter(Question.title.contains(q)).order_by('-creat_time’)
    3. 加载查询结果:
      return render_template('index.html', question=qu)

  4. 组合条件查询
    from sqlalchemy import or_, and_ 

示例:

Lobby.query.filter(
    or_(
        and_(
            Lobby.id == Team.lobby_id,
            LobbyPlayer.team_id == Team.id,
            LobbyPlayer.player_id == player.steamid
        ),
         and_(
            Lobby.id == spectator_table.c.lobby_id,
            spectator_table.c.player_id == player.steamid
        )
    )
)

@app.route('/search/')
def search():
    qu=request.args.get('q')
    ques=Question.query.filter(
        or_(
            Question.title.contains(qu),
            Question.detail.contains(qu)
        )
    ).order_by('-creat_time')
    return render_template('index.html',question=ques)

https://stackoverflow.com/questions/13370993/sqlalchemy-query-and-or-issue

posted @ 2017-12-20 21:06  070王学竞  阅读(157)  评论(0编辑  收藏  举报