python - Flask 404 Page Not Rendering Template -
i'm trying figure out why 404 page template not render correctly. able return text, not template. here error handler function doesn't work:
@app.errorhandler(404) def page_not_found(error): return render_template('error.html'), 404
it works if instead:
@app.errorhandler(404) def page_not_found(error): return '<h2>page not found.</h2><a href="/">click here</a> return home.', 404
i'm using blueprint route rest of urls. here more of urls.py:
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 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 , lang_code not in app.config['supported_languages'].keys(): return abort(404) @babel.localeselector def get_locale(): if session.get('lang_code') 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)
here error i'm getting:
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 rule in self._rules_by_endpoint[endpoint]: keyerror: u'none'
any idea why may happening?
i figured out! problem not way had routed urls, how language toggle working on site.
i had been using this:
{% 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>
because errorhandler function didn't have endpoint, throwing error. able working adding if statement around toggle so:
{% 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 %}
Comments
Post a Comment