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

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -