Flask-admin: flask_admin 'get_url' is undefined

Created on 11 Mar 2016  路  7Comments  路  Source: flask-admin/flask-admin

Hi supporter,

When I use flask-admin ,get error info like this ##
jinja2.exceptions.UndefinedError
UndefinedError: 'get_url' is undefined

Traceback (most recent call last)
File "C:Python274libsite-packagesflaskapp.py", line 1836, in call
return self.wsgi_app(environ, start_response)
File "C:Python274libsite-packagesflaskapp.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "C:Python274libsite-packagesflaskapp.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:Python274libsite-packagesflaskapp.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "C:Python274libsite-packagesflaskapp.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:Python274libsite-packagesflaskapp.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:Python274libsite-packagesflaskapp.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "C:Python274libsite-packagesflaskapp.py", line 1461, in dispatch_request
return self.view_functionsrule.endpoint
File "C:Python274libsite-packagesflask_adminbase.py", line 68, in inner
return self._run_view(f, _args, _kwargs)
File "C:Python274libsite-packagesflask_adminbase.py", line 367, in _run_view
return fn(self, _args, *_kwargs)
File "C:Python274libsite-packagesflask_adminmodelbase.py", line 1814, in index_view
return_url=self._get_list_url(view_args),
File "C:python_sourcequokkaquokkacoreadminmodels.py", line 43, in render
return render_template(template, theme=theme, *_kwargs)
File "C:python_sourcequokkaquokkacoretemplates.py", line 16, in render_template
return render_theme_template(theme, template, *_context)
File "C:Python274libsite-packagesquokka_themes__init__.py", line 191, in render_theme_template
return render_template(last, *
context)
File "C:Python274libsite-packagesflasktemplating.py", line 128, in render_template
context, ctx.app)
File "C:Python274libsite-packagesflasktemplating.py", line 110, in _render
rv = template.render(context)
File "C:Python274libsite-packagesjinja2environment.py", line 989, in render
return self.environment.handle_exception(exc_info, True)
File "C:Python274libsite-packagesjinja2environment.py", line 754, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:Python274libsite-packagesflask_admintemplatesbootstrap2adminmodellist.html", line 5, in top-level template code
{% import 'admin/actions.html' as actionlib with context %}
File "C:Python274libsite-packagesflask_admintemplatesbootstrap2adminmaster.html", line 1, in top-level template code
{% extends admin_base_template %}
File "C:Python274libsite-packagesflask_admintemplatesbootstrap2adminbase.html", line 30, in top-level template code
{% block page_body %}
File "C:Python274libsite-packagesflask_admintemplatesbootstrap2adminbase.html", line 59, in block "page_body"
{% block body %}{% endblock %}
File "C:Python274libsite-packagesflask_admintemplatesbootstrap2adminmodellist.html", line 13, in block "body"
{% block model_menu_bar %}
File "C:Python274libsite-packagesflask_admintemplatesbootstrap2adminmodellist.html", line 24, in block "model_menu_bar"
{{ _gettext('Create') }}
UndefinedError: 'get_url' is undefined

How can I solve this issue?
Thanks and Best Regards

Most helpful comment

Hello,
I have the same problem, but I don't use Quokka at all.
Here is the stack trace:

Traceback (most recent call last):
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 2000, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1991, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1567, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1988, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1641, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1544, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1639, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_debugtoolbar/__init__.py", line 125, in dispatch_request
    return view_func(**req.view_args)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_security/decorators.py", line 225, in wrapper
    return f(*args, **kwargs)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_security/views.py", line 138, in register
    **_ctx('register'))
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_security/core.py", line 447, in render_template
    return render_template(*args, **kwargs)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/templating.py", line 134, in render_template
    context, ctx.app)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/templating.py", line 116, in _render
    rv = template.render(context)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/jinja2/environment.py", line 989, in render
    return self.environment.handle_exception(exc_info, True)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/jinja2/environment.py", line 754, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/edouard/Sites/RemindMeal/app/templates/firewall/register.html", line 2, in top-level template code
    {% from 'fields.html' import render %}
  File "/Users/edouard/Sites/RemindMeal/app/templates/admin/my_base.html", line 1, in top-level template code
    {% extends 'admin/base.html' %}
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/base.html", line 14, in top-level template code
    {% block head_css %}
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/base.html", line 15, in block "head_css"
    <link href="{{ admin_static.url(filename='bootstrap/bootstrap3/css/bootstrap.min.css', v='3.3.5') }}" rel="stylesheet">
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/static.html", line 2, in template
    {{ get_url('admin.static', *varargs, **kwargs) }}
UndefinedError: 'get_url' is undefined

And here are my requirements:

alembic==0.8.7
Babel==2.3.4
blinker==1.4
click==6.6
Flask==0.11.1
Flask-Admin==1.4.2
Flask-BabelEx==0.9.3
Flask-DebugToolbar==0.10.0
Flask-Login==0.3.2
Flask-Mail==0.9.1
Flask-Migrate==1.8.1
Flask-Principal==0.4.0
Flask-Script==2.0.5
Flask-Security==1.7.5
Flask-SQLAlchemy==2.1
Flask-WTF==0.12
gunicorn==19.6.0
itsdangerous==0.24
Jinja2==2.8
Mako==1.0.4
MarkupSafe==0.23
passlib==1.6.5
psycopg2==2.6.2
python-editor==1.0.1
pytz==2016.6.1
speaklater==1.3
SQLAlchemy==1.0.14
Werkzeug==0.11.10
WTForms==2.1

Can you explain the process you did to solve the problem in your auth example, so as we could correct ours too?

Thanks

All 7 comments

Quokka related. Seems like it is not passing full Flask-Admin context to render function. Check with Quokka devs.

Like mrjoes said, "not passing full Flask-Admin context to render function". This usually happens when you use render_template on a flask-admin template instead of self.render.

I get the same issue when trying your auth example.

Using:

  • Flask 0.10.1
  • Flask-Admin 1.4.2
  • Flask-Security 1.7.5
    Traceback (most recent call last):
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\app.py", line 1836, in __call__
        return self.wsgi_app(environ, start_response)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\app.py", line 1820, in wsgi_app
        response = self.make_response(self.handle_exception(e))
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\app.py", line 1403, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\_compat.py", line 33, in reraise
        raise value
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\app.py", line 1817, in wsgi_app
        response = self.full_dispatch_request()
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request
        rv = self.handle_user_exception(e)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\app.py", line 1381, in handle_user_exception
        reraise(exc_type, exc_value, tb)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\_compat.py", line 33, in reraise
        raise value
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request
        rv = self.dispatch_request()
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\app.py", line 1461, in dispatch_request
        return self.view_functions[rule.endpoint](**req.view_args)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask_security\decorators.py", line 225, in wrapper
        return f(*args, **kwargs)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask_security\views.py", line 87, in login
        **_ctx('login'))
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask_security\core.py", line 447, in render_template
        return render_template(*args, **kwargs)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\templating.py", line 128, in render_template
        context, ctx.app)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask\templating.py", line 110, in _render
        rv = template.render(context)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\jinja2\environment.py", line 989, in render
        return self.environment.handle_exception(exc_info, True)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\jinja2\environment.py", line 754, in handle_exception
        reraise(exc_type, exc_value, tb)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\jinja2\_compat.py", line 37, in reraise
        raise value.with_traceback(tb)
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\templates\security\login_user.html", line 3, in top-level template code
        {% include "security/_messages.html" %}
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask_admin\templates\bootstrap2\admin\master.html", line 1, in top-level template code
        {% extends admin_base_template %}
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\templates\my_master.html", line 1, in top-level template code
        {% extends 'admin/base.html' %}
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask_admin\templates\bootstrap2\admin\base.html", line 14, in top-level template code
        {% block head_css %}
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask_admin\templates\bootstrap2\admin\base.html", line 15, in block "head_css"
        <link href="{{ admin_static.url(filename='bootstrap/bootstrap2/css/bootstrap.css', v='2.3.2') }}" rel="stylesheet">
      File "C:\Users\Lehmann\data\python\experimental\packages\flask-admin\examples\auth\venv_win\lib\site-packages\flask_admin\templates\bootstrap2\admin\static.html", line 2, in template
        {{ get_url('admin.static', *varargs, **kwargs) }}
    jinja2.exceptions.UndefinedError: 'get_url' is undefined

I corrected example. Try it now.

Now it works. Thank you.

Hello,
I have the same problem, but I don't use Quokka at all.
Here is the stack trace:

Traceback (most recent call last):
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 2000, in __call__
    return self.wsgi_app(environ, start_response)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1991, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1567, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1988, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1641, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1544, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/app.py", line 1639, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_debugtoolbar/__init__.py", line 125, in dispatch_request
    return view_func(**req.view_args)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_security/decorators.py", line 225, in wrapper
    return f(*args, **kwargs)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_security/views.py", line 138, in register
    **_ctx('register'))
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_security/core.py", line 447, in render_template
    return render_template(*args, **kwargs)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/templating.py", line 134, in render_template
    context, ctx.app)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask/templating.py", line 116, in _render
    rv = template.render(context)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/jinja2/environment.py", line 989, in render
    return self.environment.handle_exception(exc_info, True)
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/jinja2/environment.py", line 754, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/edouard/Sites/RemindMeal/app/templates/firewall/register.html", line 2, in top-level template code
    {% from 'fields.html' import render %}
  File "/Users/edouard/Sites/RemindMeal/app/templates/admin/my_base.html", line 1, in top-level template code
    {% extends 'admin/base.html' %}
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/base.html", line 14, in top-level template code
    {% block head_css %}
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/base.html", line 15, in block "head_css"
    <link href="{{ admin_static.url(filename='bootstrap/bootstrap3/css/bootstrap.min.css', v='3.3.5') }}" rel="stylesheet">
  File "/Users/edouard/Sites/RemindMeal/env/lib/python2.7/site-packages/flask_admin/templates/bootstrap3/admin/static.html", line 2, in template
    {{ get_url('admin.static', *varargs, **kwargs) }}
UndefinedError: 'get_url' is undefined

And here are my requirements:

alembic==0.8.7
Babel==2.3.4
blinker==1.4
click==6.6
Flask==0.11.1
Flask-Admin==1.4.2
Flask-BabelEx==0.9.3
Flask-DebugToolbar==0.10.0
Flask-Login==0.3.2
Flask-Mail==0.9.1
Flask-Migrate==1.8.1
Flask-Principal==0.4.0
Flask-Script==2.0.5
Flask-Security==1.7.5
Flask-SQLAlchemy==2.1
Flask-WTF==0.12
gunicorn==19.6.0
itsdangerous==0.24
Jinja2==2.8
Mako==1.0.4
MarkupSafe==0.23
passlib==1.6.5
psycopg2==2.6.2
python-editor==1.0.1
pytz==2016.6.1
speaklater==1.3
SQLAlchemy==1.0.14
Werkzeug==0.11.10
WTForms==2.1

Can you explain the process you did to solve the problem in your auth example, so as we could correct ours too?

Thanks

I had the same problem so for anyone solving this (I will describe my case)

  • problem is caused by this change in newer versions of flask-admin and some template context conflicts (for me it was probably flask-admin and flask-security)
  • mrjoes is probably refering to this change and that is also what worked for me - i used the same snippet and instead of security context processor set it as global context processor after application and admin initilization
@application.app.context_processor
def inject_url():
    return dict(
         # admin_base_template=admin.base_template,
         admin_view=admin.index_view,
         # h=admin_helpers,
         get_url=url_for
     )
Was this page helpful?
0 / 5 - 0 ratings