2013-07-31 13 views
5

Ich versuche, meine Vorlage mit 'master.html' Vorlage von Flask-Admin wie folgt zu verlängern:Flask-Admin Verlängerung Vorlagen

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

Und ich bekomme Fehler:

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 

Hier ist, wie ich die Initialisierung Flask-Admin:

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

Und AdminView Klasse:

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

Können Sie zeigen, wie Sie Ihre Admin- und Vorlagenverzeichnisstruktur initialisieren? – alecxe

+0

Hier gehts, admin = Admin (app, name = 'Spinnen') admin.add_view (AdminView (Benutzer, Sitzung, name = 'Benutzer')) – Sleepwalker

+0

Wie definiert 'AdminView'? – tbicr

Antwort

6

Sieht aus wie Sie Vorlage außerhalb von Flask-Admin verwenden.

flask_admin.base.BaseView haben Sie selbst render function, die einige Variablen einrichten. Sie können versuchen, es manuell einzurichten, aber aber sehe ich nicht Grund Flask-Admin Vorlagen außerhalb von Flask-Admin Ansichten verwenden.

Siehe schlechtes Beispiel:

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

Oh. jetzt sehe ich. Es war eine Art dumme Frage :) Vielen Dank @tbicr – Sleepwalker

+0

@tbicr Da Sie scheinen, ein Kolben-Admin-Pro zu sein: nur für den Fall, dass Sie die Antwort kennen, begann ich ein Kopfgeld auf [diese Frage] (http: // stackoverflow .com/q/33660840). :) –

6

ich in der gleichen Ausgabe lief versucht, die Flask-Admin-Vorlagen zu erweitern.

Das Ändern return render_template('path_to_template') zu return self.render('path_to_template') löste das Problem.

+0

Dies funktioniert nur, wenn Sie dieses 'self' Objekt haben (d. H. Innerhalb einer Klasseninstanz - in diesem Fall können Sie' @ app.route() 'nicht so einfach definieren. –