【问题标题】:Flask-Admin extending templatesFlask-Admin 扩展模板
【发布时间】:2013-07-31 13:17:33
【问题描述】:

我正在尝试使用 Flask-Admin 的“master.html”模板扩展我的模板,如下所示:

{% 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()

【问题讨论】:

  • 您能说明如何初始化您的管理员和模板目录结构吗?
  • 给你,admin = Admin(app, name='Spiders') admin.add_view(AdminView(User, Session, name='Users'))
  • 如何定义AdminView
  • @tbicr,我已经更新了我的问题
  • @alecxe,请查看我更新的问题

标签: python flask jinja2 flask-admin


【解决方案1】:

看起来你使用Flask-Admin之外的模板。

flask_admin.base.BaseView 有自己的render function,它设置了一些变量。您可以尝试手动设置它,但是我看不出有理由在 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')

【讨论】:

  • 哦。现在我明白了。这是一个愚蠢的问题:) 非常感谢@tbicr
  • @tbicr 由于您似乎是烧瓶管理员专业人士:以防万一您知道答案,我开始对this question 进行赏金。 :)
【解决方案2】:

我在尝试扩展 Flask-Admin 模板时遇到了同样的问题。

return render_template('path_to_template') 更改为return self.render('path_to_template') 解决了该问题。

【讨论】:

  • 只有当你有 self 对象时才有效(即在一个类实例中——在这种情况下你并不总是可以那么容易地定义 @app.route())。
猜你喜欢
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
相关资源
最近更新 更多