2016-07-25 4 views
0

404ページのテンプレートが正しくレンダリングされない理由を理解しようとしています。私はテキストを返すことができますが、テンプレートは返すことができません。ここでは動作しません、私のエラーハンドラ関数は次のとおりです。Flask 404 Page Not Rendering Template

@app.errorhandler(404) 
def page_not_found(error): 
    return render_template('error.html'), 404 

それは私が代わりにこのような何かあれば動作します。

@app.errorhandler(404) 
def page_not_found(error): 
    return '<h2>Page Not Found.</h2><a href="/">Click here</a> to return home.', 404 

を私はルートに私のURLの残りの部分を青写真を使用しています。ここで

main = Blueprint('main', __name__, url_prefix='/language/<lang_code>/') 
app.config.from_object(__name__) 
babel = Babel(app) 

def render(template_name, data): 
    template_data = { 
    } 
    template_data.update(data) 
    return render_template(template_name, **template_data) 

@app.url_defaults 
def set_language_code(endpoint, values): 
    if 'lang_code' in values or not session['lang_code']: 
     return 
    if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'): 
     values['lang_code'] = session['lang_code'] 

@app.url_value_preprocessor 
def get_lang_code(endpoint, values): 
    if values is not None: 
     session['lang_code'] = values.pop('lang_code', None) 

@app.before_request 
def ensure_lang_support(): 
    lang_code = session['lang_code'] 
    if lang_code and lang_code not in app.config['SUPPORTED_LANGUAGES'].keys(): 
     return abort(404) 

@babel.localeselector 
def get_locale(): 
    if session.get('lang_code') is None: 
     session['lang_code']=request.accept_languages.best_match(app.config['SUPPORTED_LANGUAGES'].keys()) 
    return session['lang_code'] 

@app.route('/') 
def root(): 
    return redirect(url_for('main.index_en', lang_code='en')) 

@main.route('accueil', endpoint="index_fr") 
@main.route('home', endpoint="index_en") 
def index(): 
    return render('index.html', {}) 

app.register_blueprint(main) 

私は取得していますエラーです:ここに私urls.pyの詳細ですなぜこれが起こってすることができる

File "lib/python2.7/site-packages/flask/helpers.py", line 296, in url_for appctx.app.inject_url_defaults(endpoint, values) 
File "lib/python2.7/site-packages/flask/app.py", line 1623, in inject_url_defaults func(endpoint, values) 
File "app/urls.py", line 35, in set_language_code if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'): 
File "lib/python2.7/site-packages/werkzeug/routing.py", line 1173, in is_endpoint_expecting for rule in self._rules_by_endpoint[endpoint]: 
KeyError: u'None' 

任意のアイデアは?

答えて

2

私はそれを理解しました!問題は、URLをルーティングした方法ではなく、言語切り替えが自分のサイトでどのように機能していたかにあります。

私はこれを使用していました:

{% if session['lang_code']=='en' %} 
    {% set new_lang_code='fr' %} 
{% else %} 
    {% set new_lang_code='en' %} 
{% endif %} 
<li><a href="{{ url_for(request.endpoint|replace("_"+session['lang_code'], "_"+new_lang_code))|replace("/"+session['lang_code']+"/", "/"+new_lang_code+"/") }}">{{ _('Fr') }}</a></li> 

のErrorHandler機能は、エンドポイントを持っていなかったので、それはエラーを投げていました。次のようにif文をトグルの周りに追加することで動作させることができました:

{% if request.endpoint != None %} 
    <li><a href="{{ url_for(request.endpoint|replace("_"+session['lang_code'], "_"+new_lang_code))|replace("/"+session['lang_code']+"/", "/"+new_lang_code+"/") }}">{{ _('Fr') }}</a></li> 
{% endif %} 
関連する問題