2013-07-31 42 views
5

Tôi đang cố gắng để mở rộng mẫu của tôi với 'master.html' mẫu của Flask-Admin như thế này:Flask-Admin mở rộng mẫu

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

Và tôi nhận được lỗi:

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 

đây là làm thế nào tôi khởi Flask-Admin:

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

Và lớp 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() 
+1

Bạn có thể cho biết cách bạn khởi tạo cấu trúc thư mục mẫu và quản trị viên của mình không? – alecxe

+0

Ở đây bạn đi, quản trị = Quản trị viên (ứng dụng, tên = 'Nhện') admin.add_view (AdminView (Người dùng, Phiên, tên = 'Người dùng')) – Sleepwalker

+0

Cách xác định 'AdminView'? – tbicr

Trả lời

6

Có vẻ như bạn sử dụng mẫu bên ngoài Flask-Admin.

flask_admin.base.BaseView có tự render function, thiết lập một số biến. Bạn có thể thử thiết lập thủ công, nhưng tuy nhiên tôi không thấy lý do nào sử dụng các mẫu Flask-Admin bên ngoài số Flask-Admin chế độ xem.

Xem ví dụ xấu:

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') 
+0

Ồ. Bây giờ tôi thấy. Đó là một câu hỏi ngu ngốc :) Cảm ơn rất nhiều @tbicr – Sleepwalker

+0

@tbicr Vì bạn có vẻ là một chuyên gia bình-quản trị: chỉ trong trường hợp bạn biết câu trả lời, tôi đã bắt đầu một phần thưởng [câu hỏi này] (http: // stackoverflow .com/q/33660840). :) –

6

Tôi chạy vào cùng một vấn đề cố gắng mở rộng các mẫu Flask-quản trị.

Thay đổi return render_template('path_to_template') thành return self.render('path_to_template') giải quyết sự cố.

+0

Điều này chỉ hoạt động nếu bạn có đối tượng 'self' đó (ví dụ bên trong một cá thể lớp - trong trường hợp này bạn không phải lúc nào cũng có thể định nghĩa' @ app.route() 'dễ dàng). –

Các vấn đề liên quan