python - 将联系页面添加到 Flask 管理

标签 python flask 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 实例一样激活此 View :

admin.add_view(ContactsView('Contacts', url='/contacts'))

关于python - 将联系页面添加到 Flask 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42753792/

相关文章:

python - Flask-Admin 在更新时删除辅助映射

python - plt.show() 可以找到字体,但 plt.savefig() 不能

python - 我如何处理 django 嵌套模型?

python - 将 Python 转换为 Scala

Python Flask unittest 无法为 GET 请求设置 header

Python Flask 应用程序在 TOTP 错误中前导零。 ( python 2.7)

python - Flask-Login login_manager.session_protection=strong 不会重定向到登录页面

flask - Flask-admin form_choices 中的多个选择

python - 为什么仅当 Debug=False AND db 设置为 Heroku 上的生产数据库时,django 才会在服务器 500 上失败?

python - flask - 405,方法不允许