Расширение шаблонов Flask-Admin

Я пытаюсь расширить свой шаблон с помощью шаблона master.html Flask-Admin следующим образом:

{% extends 'admin/master.html' %}
{% block body %}
    Hello!!!
{% endblock %}

И получаю ошибку:

File "/usr/local/Cellar/python/2.7.3/lib/python2.7/site-packages/Jinja2-2.6-py2.7.egg/jinja2/environment.py", line 894, in render
return self.environment.handle_exception(exc_info, True)
File "/Users/Slowpoke/Projects/Python/spider/spider/templates/form.html", line 1, in top-level template code
{% extends 'admin/master.html' %}
File "/usr/local/Cellar/python/2.7.3/lib/python2.7/site-packages/Flask_Admin-1.0.6-py2.7.egg/flask_admin/templates/admin/master.html", line 1, in top-level template code
{% extends admin_base_template %}
File "/usr/local/Cellar/python/2.7.3/lib/python2.7/site-packages/Flask-0.9-py2.7.egg/flask/templating.py", line 57, in get_source
return loader.get_source(environment, local_name)
File "/usr/local/Cellar/python/2.7.3/lib/python2.7/site-packages/Jinja2-2.6-py2.7.egg/jinja2/loaders.py", line 162, in get_source
pieces = split_template_path(template)
File "/usr/local/Cellar/python/2.7.3/lib/python2.7/site-packages/Jinja2-2.6-py2.7.egg/jinja2/loaders.py", line 29, in split_template_path
for piece in template.split('/'):
UndefinedError: 'admin_base_template' is undefined

Вот как я инициализирую Flask-Admin:

admin = Admin(app, name='Spiders')
admin.add_view(AdminView(User, Session, name='Users'))

И класс AdminView:

from flask.ext.admin.contrib.sqlamodel import ModelView
from flask.ext import login
class AdminView(ModelView):
    def is_accessible(self):
        return login.current_user.is_authenticated()

person Sleepwalker    schedule 31.07.2013    source источник
comment
Не могли бы вы показать, как вы инициализируете структуру каталогов администратора и шаблона?   -  person alecxe    schedule 31.07.2013
comment
Вот, admin = Admin(app, name='Spiders') admin.add_view(AdminView(User, Session, name='Users'))   -  person Sleepwalker    schedule 01.08.2013
comment
Как определяется AdminView?   -  person tbicr    schedule 01.08.2013
comment
@tbicr, я обновил свой вопрос   -  person Sleepwalker    schedule 02.08.2013
comment
@alecxe, пожалуйста, посмотрите мой обновленный вопрос   -  person Sleepwalker    schedule 02.08.2013


Ответы (2)


Похоже, вы используете шаблон за пределами Flask-Admin.

flask_admin.base.BaseView есть собственная функция рендеринга, которая настраивает некоторые переменные. Вы можете попробовать настроить его вручную, но я не вижу смысла использовать Flask-Admin шаблоны вне Flask-Admin представлений.

См. плохой пример:

class MyView(BaseView):
    def __init__(self, *args, **kwargs):
        self._default_view = True
        super(MyView, self).__init__(*args, **kwargs)
        self.admin = Admin()

@app.route('/form')
def form():
    return MyView().render('form.html')
person tbicr    schedule 02.08.2013
comment
Ой. Теперь я вижу. Это был довольно глупый вопрос :) Большое спасибо @tbicr - person Sleepwalker; 02.08.2013
comment
@tbicr Поскольку вы, кажется, являетесь профессионалом в области администрирования фляг: на всякий случай, если вы знаете ответ, я начал вознаграждение за этот вопрос . :) - person Hans Schindler; 14.11.2015

Я столкнулся с той же проблемой, пытаясь расширить шаблоны Flask-Admin.

Изменение return render_template('path_to_template') на return self.render('path_to_template') решило проблему.

person bill__    schedule 08.01.2014
comment
Это работает, только если у вас есть этот объект self (т.е. внутри экземпляра класса — в этом случае вы не всегда можете так легко определить @app.route()). - person Yury Kirienko; 21.10.2017