将联系页面添加到 Flask Admin
Adding Contact Page to Flask Admin
我有一个正在处理的 Flask-Admin 项目,我希望添加一个联系我们的页面。我正在关注 https://code.tutsplus.com/tutorials/intro-to-flask-adding-a-contact-page--net-28982
上的示例
这个问题是为 Flask 设计的,但我所有的模板都是基于 Flask-Admin 模板。
@app.route('/contact', methods=['GET', 'POST'])
def contact():
form = ContactForm()
if request.method == 'POST':
if form.validate() == False:
flash('All fields are required.')
return render_template('contact.html', form=form)
else:
msg = Message(form.subject.data, sender='contact@example.com',
recipients=['email@email.com'])
msg.body = """
From: %s <%s>
%s
""" % (form.name.data, form.email.data, form.message.data)
mail.send(msg)
return render_template('contact.html', success=True)
elif request.method == 'GET':
return render_template('contact.html', form=form, admin=admin)
contact.html 扩展了两个管理模板
{% import 'admin/layout.html' as layout with context -%}
{% extends 'admin/base.html' %}
因此抛出了一条错误消息。
jinja2.exceptions.UndefinedError: 'admin_view' is undefined
我知道我可以修改模板以删除扩展管理模板,但是整个站点的导航是由
完成的
{{ layout.menu() }}
{{ layout.menu_links() }}
所以理想情况下,我想让联系我们页面与管理模板一起工作。我不确定如何传递整个管理上下文。
您需要使用 flask_admin.base.BaseView.render
方法在 flask-admin 上下文中处理您的模板。它可能看起来像这样:
from flask_admin import BaseView, expose
class ContactsView(BaseView):
@expose('/')
def index(self):
# Here are the contents of your "contact" route function
return self.render('contact.html', form=form, admin=admin)
您可以使用与 ModelView
个实例相同的方式激活此视图:
admin.add_view(ContactsView('Contacts', url='/contacts'))
我有一个正在处理的 Flask-Admin 项目,我希望添加一个联系我们的页面。我正在关注 https://code.tutsplus.com/tutorials/intro-to-flask-adding-a-contact-page--net-28982
上的示例这个问题是为 Flask 设计的,但我所有的模板都是基于 Flask-Admin 模板。
@app.route('/contact', methods=['GET', 'POST'])
def contact():
form = ContactForm()
if request.method == 'POST':
if form.validate() == False:
flash('All fields are required.')
return render_template('contact.html', form=form)
else:
msg = Message(form.subject.data, sender='contact@example.com',
recipients=['email@email.com'])
msg.body = """
From: %s <%s>
%s
""" % (form.name.data, form.email.data, form.message.data)
mail.send(msg)
return render_template('contact.html', success=True)
elif request.method == 'GET':
return render_template('contact.html', form=form, admin=admin)
contact.html 扩展了两个管理模板
{% import 'admin/layout.html' as layout with context -%}
{% extends 'admin/base.html' %}
因此抛出了一条错误消息。
jinja2.exceptions.UndefinedError: 'admin_view' is undefined
我知道我可以修改模板以删除扩展管理模板,但是整个站点的导航是由
完成的{{ layout.menu() }}
{{ layout.menu_links() }}
所以理想情况下,我想让联系我们页面与管理模板一起工作。我不确定如何传递整个管理上下文。
您需要使用 flask_admin.base.BaseView.render
方法在 flask-admin 上下文中处理您的模板。它可能看起来像这样:
from flask_admin import BaseView, expose
class ContactsView(BaseView):
@expose('/')
def index(self):
# Here are the contents of your "contact" route function
return self.render('contact.html', form=form, admin=admin)
您可以使用与 ModelView
个实例相同的方式激活此视图:
admin.add_view(ContactsView('Contacts', url='/contacts'))