2016-07-25 15 views
0

내가 add_url_rule플라스크 청사진 add_url_rule

의 방법으로 플라스크 청사진을 사용하려고 할 때 내가 청사진에 갇혀 있어요을 사용하여 여기 내 플라스크 프로젝트 구조입니다 : main.py에서

myapp 
... __init__.py 
... app.py 
... model 
... static 
... views 
...... main.py 
... templates 
...... base.html 
...... results.html 

,

0,123,776 :
from flask import Flask, url_for, Blueprint 
main_bp = Blueprint('main', __name__) 

def home(): 
    return redirect(url_for('main.results')) 

def results(): 
    # some code 
    return render_template('result.html') 

내 app.py에서

는, 여기에 코드 것 : 여기 내 코드입니다 내가

을 사용하고 때

Traceback (most recent call last): 
File "/Users/deamon/venv/src/staticngclient/staticng_client/middlewares/wsgi.py", line 25, in __call__ 
return app(environ, start_response) 
File "/Users/deamon/venv/src/daeprofiling/dae_profiling/middleware.py", line 24, in __call__ 
    return self.app(environ, start_response) 
File "/Users/deamon/venv/src/doubancommonlib/douban/common/middleware/content_filter.py", line 18, in __call__ 
    app_iter = self.application(environ, response.start_response) 
File "/Users/deamon/dae/app/web.py", line 77, in __call__ 
    return handler(environ, start_response) 
File "/Users/deamon/Projects/dae/dae/handlers/__init__.py", line 65, in __call__ 
    return self.app(environ, start_response) 
File "/Users/deamon/Projects/dae/dae/handlers/web.py", line 46, in __call__ 
    return self._app(*a, **kw) 
File "/Users/deamon/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
File "/Users/deamon/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
File "/Users/deamon/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
File "/Users/deamon/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
File "/Users/deamon/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
File "/Users/deamon/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
File "/Users/deamon/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
File "/Users/deamon/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
File "/Users/deamon/kiwi/views/main.py", line 19, in home 
    return redirect(url_for('main.results')) 
File "/Users/deamon/venv/lib/python2.7/site-packages/flask/helpers.py", line 312, in url_for 
    return appctx.app.handle_url_build_error(error, endpoint, values) 
File "/Users/deamon/venv/lib/python2.7/site-packages/flask/app.py", line 1641, in handle_url_build_error 
    reraise(exc_type, exc_value, tb) 
File "/Users/deamon/venv/lib/python2.7/site-packages/flask/helpers.py", line 305, in url_for 
    force_external=external) 
File "/Users/deamon/venv/lib/python2.7/site-packages/werkzeug/routing.py", line 1678, in build 
    raise BuildError(endpoint, values, method) 
BuildError: ('main.results', {}, None) 

또한, 같은 base.html 또는 results.html, 같은 MYE 템플릿에서 :

내가 색인 페이지를 방문하고, 나는 항상 다음과 같은 오류 메시지를 받았습니다

 <a class="navbar-brand" href="{{ url_for('main.home') }}">kiwi</a> 

같은 오류가 발생합니다.

누군가 도움을 줄 수 있습니까?

답변

1

그래, 내가 본 첫 번째 문제는 청사진을 사용하려고해도 실제로 아무 것도하지 않는 것입니다.

예를 들어, main_bp = Blueprint('main', __name__) 라인을 만들었지 만 그 후에 실제로 URL 끝점을 등록하지 않고 대신 주 앱에서 가져 오기를 통해 처리하려고합니다. 실제로 엔드 포인트에게 청사진에 를 등록하지만 청사진을 접두사로 main.results를 호출하여 리디렉션을 만들려고하지 않기 때문에

'주'당신의 url_for 기능이 실패합니다.

이것은 코드 청사진

청사진

from flask import Flask, url_for, Blueprint 
main_bp = Blueprint('main', __name__) 

@main_bp.route('/') 
def home(): 
    return redirect(url_for('main.results')) 

@main_bp.route('/results') 
def results(): 
    # some code 
    return render_template('result.html') 

및 app.py

from myapp.views.main import main_bp 

app.register_blueprint(main_bp) 

또는 적절한 사용과 어떻게 보일지 당신은이 작동 (add_url_rule를 사용하려는 경우 정확히 장식 자처럼) 청사진 파일에 main_bp.add_url_rule(...)을 사용하면됩니다. add_url_rule와

작업을 예를

청사진 파일

from flask import Flask, url_for, Blueprint, redirect, render_template 
main_bp = Blueprint('main', __name__) 

def home(): 
    return redirect(url_for('main.results')) 

def results(): 
    # some code 
    return 'some results' 

main_bp.add_url_rule('/', view_func=home) 
main_bp.add_url_rule('/results', view_func=results) 

응용 프로그램 파일을 사용자의 분석에 대한

from flask import Flask 
import bp 

app = Flask(__name__) 


app.register_blueprint(bp.main_bp) 



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

감사합니다. 'main_bp.add_url_rule (...) '을 사용하고 싶지만 코드가 작동하지 않습니다. 여기에'main.py'에 내 코드가 있습니다 :'main_bp.add_url_rule ('/', view_func = home)','view_func = home'이 올바르지 않다는 것을 알고 있지만, 나는 옳은 것이 무엇인지 모르겠습니다. 제 코드를 정정 해 주시겠습니까? – shitoujizu

+0

@shitoujizu는 내 게시물 끝에 add_url_rule을 사용하여 작업 예제를 추가했지만 훨씬 간단하게 데코레이터 구문을 사용해야합니다.문제가 있으면 오류 로그를 게시하십시오. – MadRabbit

+0

나는 그것을 얻었다. 'decorator'와'add_url_rule'모두 당신의 예제와 함께 작동합니다. 당신은 내 문제를 해결했습니다. 고마워. – shitoujizu