通过jinja2打印除烧瓶模板中的消息

时间:2017-06-02 14:58:27

标签: python html flask jinja2 psycopg2

我创建了一个连接到数据库的函数,该数据库打印出无法连接到db'如果没有建立连接,则显示消息:

  def connectToDB():
        connectionString = 'dbname=reportingdb1 user=red_gui password=RadnfgoInd host=10.100.51.42'
  try:
     return psycopg2.connect(connectionString)
  except:
     print ("Failure to connect to db")

在索引部分的views.py文件中,立即调用此函数,在我的测试环境中,当我故意使用db的错误凭据(用于测试目的)时,将except failure语句打印到我的终端中。

 ####Index Page
@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index():
          connectToDB()
          form = StaffNames()
          if form.validate_on_submit():
                  return redirect('/results')
          return render_template('index.html',title='Search Page',form=form)

我的问题是,我希望在网页上打印出此消息。我尝试过使用return代替print,而且还没有成功。我还尝试将except消息存储在变量中,然后在我的templates / index.html文件中,通过jinja2花括号调用它。对于我尝试的示例: 在views.py

except:
     noconnect = "Failure to connect to db"

然后在我的index.html:

{{ noconnect }}

但这也没有奏效。这样做的最佳做法是什么? 感谢

2 个答案:

答案 0 :(得分:1)

简化connectToDB,以便它只连接到数据库,而不是其他任何内容。

def connectToDB():
    connectionString = 'dbname=reportingdb1 user=red_gui password=RadnfgoInd host=10.100.51.42'
    psycopg2.connect(connectionString)

处理视图中的任何潜在异常(但请注意,捕获所有异常不是一个好习惯)。

 ####Index Page
@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index():
    exception = None
    try:
        connectToDB()
    except:
        exception = 'Failure to connect to db'

    form = StaffNames()
    if not exception:
        if form.validate_on_submit():
            return redirect('/results')

    return render_template('index.html',title='Search Page', form=form, exception=exception)

{{ exception }}放在index.html

的某个位置

答案 1 :(得分:0)

Web框架通常要求通过上下文将对象传递给视图和模板。您必须传递render_template中的对象:

. . .

error = connectToDB()

return render_template('index.html', title='Search Page',
                       form=form, error=error)

然后在您的模板中,使用:{{ error }}

另一种更像Django的方法是为您的数据创建一个字典:

error = 'error message'
test = 'test'

. . .

data = {
    'error': error,
    'test': test
}

然后像这样返回render_template

return render_template('index.html', title='Search Page',
                       form=form, **data)

双星使你仍然可以这样做:{{ error }}。否则,您必须执行此操作:{{ data.error }}