Python 在Flask中使用语法高亮显示标记

Python 在Flask中使用语法高亮显示标记,python,flask,Python,Flask,我试图在Python中实现相同的堆栈溢出文本区域,并使用语法高亮显示,我已经完成了这一步,但我无法让它工作 app.py from flask import Flask, render_template, request import preview app = Flask(__name__) @app.route('/',methods=['GET','POST']) def index(): if request.method == 'POST': markdow

我试图在Python中实现相同的堆栈溢出文本区域,并使用语法高亮显示,我已经完成了这一步,但我无法让它工作

app.py

from flask import Flask, render_template, request
import preview

app = Flask(__name__)

@app.route('/',methods=['GET','POST'])
def index():
    if request.method == 'POST':
        markdown_content = request.args.get['wdd-input']
        post_preview = preview.markdown(markdown_content['data'])
        return render_template('test.html', result=post_preview)
    if request.method == 'GET':
        return render_template('demo.html')

if __name__ == '__main__':
    app.run()
预览是一种基于Pygments的语法高亮显示和显示功能

test.html

<!DOCTYPE html>

<html lang="en">
<head>
  <meta charset="utf-8">
  <title>PageDown Demo Page</title>

  <link rel="stylesheet" type="text/css" href="/static/css/bootstrap.min.css">
  <link rel="stylesheet" type="text/css" href="/static/css/highlighting.css">
  <link rel="stylesheet" type="text/css" href="/static/css/demo.css" />
  <script type="text/javascript" src="/static/js/jquery-1.9.1.min.js"></script>
  <script type="text/javascript" src="/static/js/bootstrap.min.js"></script>
  <script type="text/javascript" src="/static/js/hycus-textarea.js"></script>
  <script type="text/javascript" src="/static/js/Markdown.Editor.js"></script>
  <script type="text/javascript">
    (function (m) {
      m(document).ready(function () {
        m('textarea.wmd-input').TextAreaResizer();
      });
    })(jQuery);
  </script>
</head>

<body>
  <div class="container">
      <div id="pagedwon">
        <div id="tabnav">
          <ul class="nav nav-tabs" id="markdown_tab" style="padding: 0 10px; margin-bottom: 10px;">
            <li class="active"><a href="#edit" data-toggle="tab">Edit</a></li>
            <li><a href="#markdownpreview" data-toggle="tab">Preview</a></li>
          </ul>
        </div>

        <div class="tab-content">
          <div class="tab-pane active" id="edit">
            <div class="wmd-panel">
              <div id="wmd-button-bar"></div>
<textarea class="wmd-input" id="wmd-input" rows="10" name="text-input">
This is the *pagedown* editor.
------------------------------

**Note**: Just plain **Markdown**, except that the input is sanitized: **HTML** is not allowed.
</textarea>
            </div>
            <script type="text/javascript">
              (function () {
                  var pagedown_editor = new Markdown.Editor();
                  pagedown_editor.run();
              })();
            </script>

            <script type="text/javascript">
              (function (m) {
                m("#markdown_tab a").click(function () {
                  if (m(this).html() == "Preview"){
                    var markdown_content = m("#wmd-input").val();
                    if (!markdown_content) {
                      m("div#markdownpreview").html("Empty Markdown Content.");
                    } else {
                      content_to_preview = {
                        "data": markdown_content
                      }
                      m.post("/", content_to_preview)
                        .success( function(preview_content){
                          if (preview_content == 'None'){
                            m("div#markdownpreview").html("No content received.");
                          } else {
                            m("div#markdownpreview").html(preview_content);
                          }
                        })
                        .error( function () {
                          m("div#markdownpreview").html("Sorry, error occurred. Please retry.");
                        });
                    }
                  }
                });
              })(jQuery);
            </script>
          </div>

          <div class="tab-pane markdown-body" id="markdownpreview">
            Loding preview content ...
          </div>
        </div>
      </div>
  </div>
</body>
</html>
如何让它工作,请帮助。我不熟悉烧瓶。

  • 首先,用于查询字符串参数,但您通过
    POST
    发送数据。你应该改用
  • 第二,是一个函数,不支持协议(这是导致错误的原因)
  • 第三,正如@Doobeh在评论中指出的,您在
    data
    键下发送数据,但您试图通过“wdd input”键访问数据,这将导致错误
  • 最后,从中提取的值将是一个字符串(不支持字符串作为值),并且您不需要它,因为您已经拥有了整个字符串
您的
帖子
部分的重新处理版本:

if request.method == 'POST':
    markdown_content = request.form.get('data', 'No content yet ...')
    post_preview = preview.markdown(markdown_content)
    return render_template('test.html', result=post_preview)

试着在调试模式打开的情况下运行程序,这会给你一个比你收到的500服务器错误消息更深刻的错误消息。将
app.run()
更改为
app.run(debug=True)
以激活调试控制台。然后让我们知道您将获得stacktrace中显示的信息。不,dint获得错误。浏览器中显示了什么?浏览器显示编辑器,单击预览选项卡时,抱歉,发生了错误。请重试。好的,所以错误不是来自浏览器,而是来自您正在运行的Javascript,它调用一个视图,失败,并显示该消息。我认为这是因为您只将
数据
发布到视图中,而视图正在查找
wdd输入
,当该输入不存在时,调用preview失败,生成错误,js随后显示该消息
if request.method == 'POST':
    markdown_content = request.form.get('data', 'No content yet ...')
    post_preview = preview.markdown(markdown_content)
    return render_template('test.html', result=post_preview)