2016-12-22 1 views
1

나는 파이썬 플라스크 응용 프로그램을 개발 그리고 난 간단한 검색 기능을 구현하기 위해 노력하고있어 :/views.py잘못된 jinja2 청사진 경로

from . import home_blueprint 
################################# SEARCH ################################# 


@home_blueprint.route("/search") 
@login_required 
def search(): 
    results = Politic.query.whoosh_search(request.args.get('query')).all() 
    #results = Politic.query.whoosh_search(query).all() 
    for p in results: 
     print p.publicName 
    print results 
    return render_template('search_results.html', 
          results=results) 

매우 간단

집 프로젝트에 청사진을 포함하기 전에 작업 해 보았습니다. 내 뷰에서이 함수를 호출하면 아무 것도 얻을 수 없습니다.

업데이트!base.html 파일 :

url_for 내가 내 home_blueprint을 통과하는 기능과 내가 (검색)를 호출하려는 기능을 찾습니다 때문에
<form class="form-inline" method="GET" action="{{url_for('home.search')}}"> 
       <div class="form-group"> 
        <label for="query">Poltician</label> 
        <input type="text" class="form-control" name="query" id="query"> 
       </div> 
       <button type="submit" class="btn btn-primary">Search</button> 
      </form> 

.

검색 결과에 이 표시되지 않는 이유가 있습니까? 기능이 있습니까? 내 .html 파일에서 뭔가 잘못하고 있습니까?

안부

편집 : (초기화 평)

################# 
#### imports #### 
################# 

################ 
#### config #### 
################ 
from flask import Flask, g 
app = Flask(__name__) 

from project.models import db, User, Politic, Organization 
import datetime 
from forms import SearchForm 
import os 
from flask_login import LoginManager, \ 
           current_user 





print(os.environ['APP_SETTINGS']) 
app.config.from_object(os.environ['APP_SETTINGS']) 
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True 
app.config['WHOOSH_BASE'] = 'whoosh' 
db.init_app(app) 

login_manager = LoginManager() 
login_manager.init_app(app) 
login_manager.login_view = "users.login" 


from project.users.views import users_blueprint 
#from project.home.views import home_blueprint 
from project.home import home_blueprint 
from project.politicians.views import politicians_blueprint 
from project.organizations.views import organizations_blueprint 
from project.proposals.views import proposals_blueprint 
from project.flag.views import flag_blueprint 
# register our blueprints 
app.register_blueprint(users_blueprint) 
app.register_blueprint(home_blueprint) 
app.register_blueprint(politicians_blueprint) 
app.register_blueprint(organizations_blueprint) 
app.register_blueprint(proposals_blueprint) 
app.register_blueprint(flag_blueprint) 


@app.before_request 
def before_request(): 
    g.user = current_user 
    if g.user.is_authenticated: 
     g.user.last_seen = datetime.datetime.utcnow() 
     db.session.add(g.user) 
     db.session.commit() 
     g.search_form = SearchForm() 


@login_manager.user_loader 
def user_loader(email): 
    """Given *user_id*, return the associated User object. 

    :param unicode user_id: user_id (email) user to retrieve 
    """ 
    return User.query.filter_by(email=email).first() 

편집 내 프로젝트 트리 : 나는 변경 제안 metmirr 않았다

enter image description here

~ d를 지금 내 프로젝트 구조는 이것이다 : 프로젝트/홈/__ 내가 검색 init__.py

from flask import Blueprint 

home_blueprint = Blueprint(
    'home', __name__, 
    template_folder='templates' 
) 

from . import views 

URL :

http://localhost:5000/home?query=new

가해야 할 때 :

http://localhost:5000/search?query=new

여전히 검색 기능에 포함되지 않습니다. 나는 내가 무엇을 잘못하고 있는지 전혀 몰랐다.

도움이 될 것입니다. 감사.

+0

렌더링 된 HTML에 어떤 URL이 있습니까? – dirn

+0

출력은 얼마나됩니까? 디버깅을 시도 했습니까? – MrLeeh

+0

아무 일도 일어나지 않는다. 그것은 내/home 라우트에 있고'g.search_form.validate_on_submit()'이 True를 반환하는 것을 검색하지 못한다. 리디렉션을 호출하는 검색 기능을 사용하려면 ** search_results.html ** – Perseverance

답변

1

문제가 있다고 생각합니다. 아마도 같은 위치에 BlueprintFlask 응용 프로그램을 만들고있을 것입니다. 청사진은 응용 프로그램과 유사하며 플라스크에는 청사진이있어 대규모 응용 프로그램 구조를 가질 수 있습니다. 난 당신이 개 예를 들어 첫 번째 나던 작품을 보여줄 것이다, 다른 작업을 수행합니다

from flask import Flask, Blueprint 

app = Flask(__name__) 

main = Blueprint('main', __name__) 
app.register_blueprint(main) 

@main.route('/') 
def index(): 
    return "Hello Flask" 

app/ 
    app.py 
    main/ 
     __init__.py 
     views.py 
     forms 

#app/app.py 

from flask import Flask 

from main import main as main_blueprint 

app = Flask(__name__) 
app.register_blueprint(main_blueprint) 

if __name__ == '__main__': 
    app.run() 

#main/__init__.py 
from flask import Blueprint 

main = Blueprint('main', __name__) 

# importing this module causes the routes to be associated with the blueprint 
from . import views, forms 

#main/views.py 
from . import main 

@main.route('/') 
def index(): 
    return "Hello Flask" 

을 이제 당신이 잘 작동합니다 action="{{url_for('main.index')}}"을 쓸 때.

+0

이렇게하면 다음과 같은 결과가 나옵니다.'BuildError : ('home_blueprint.search', {}, None)' – Perseverance

+0

당신은'home_blueprint'에 등록 했습니까 – metmirr

+0

예, 등록되었습니다. 왜 이런 일이 일어나는 지 정말 이상합니다. 다른 두 가지 주장은 무엇입니까? – Perseverance

2

프로젝트에서 파이썬 인터프리터를 열면 (가상 env를 사용하고 있다면 활성화하십시오) 응용 프로그램에서 등록 된 끝점과 해당 함수가 가리키는 기능을 확인할 수 있습니다.

>>> import app 
>>> app = app.create_app() 
>>> app.url_map 
Map([<Rule '/search' (OPTIONS, POST) -> **folder_where_your_search_views_are_located**.search>, 
    <Rule '/search_results/<query>' (OPTIONS, GET) -> **folder_where_your_search_views_are_located**.search_results>]) 
+0

' (POST, OPTIONS) -> home.search>, ' 정확 하 게 경로 이름을 사용해야합니다. 내가 얻은 것 – Perseverance