使用Python Flask或其他框架输出多行字符串-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

使用Python Flask或其他框架输出多行字符串

祖安文状元 2020-02-23 16:33:26 662

我正在尝试在服务器设置中使用Redhat kickstart文件并在python中对其进行修改。我的应用程序使用python来卷曲Redhat Satellite服务器中的原始kickstart文件,然后在kickstart文件中的某些值上执行字符串替换。当我在python中卷曲文件时,它以多行字符串形式返回,这是我需要的,以便redhat kickstart正确解释文件。但是,当我通过这些框架之一(web2py,bottle,flask)返回字符串变量时,发生了某些事情,并且没有将其作为多行字符串返回,因此我需要它来保留原始文件的确切格式,而不是区域我改变。我不想将kickstart文件放在模板中,因为我是通过卫星管理文件的,如果我从Satellite卷曲文件,则它无需进行任何修改就可以进行任何修改,而无需每次进入模板。然后在模板之类的东西中,我要么返回没有模板的字符串,要么在模板文件中,我仅将1个变量作为整个kickstart文件传递给模板。

@route('/kickstart/<name>')
def kickstart(name):

    ks = vula.kickstarter.kickstart.Kickstarter()
    ks_file = ks.getKickstartFile()

    return pystache.render('{{kickstart}}', {'kickstart': ks_file})

这是我的vula软件包中的方法。它完全按照我需要的方式返回文件。但是在此与通过框架返回该值之间又发生了一些事情。

def getKickstartFile(self):

    response = urllib2.urlopen('https://my-satellite-server/core-kickstarter')
    ks_file = response.read()

    return ks_file

我开始使用Bottle作为框架,但发现有一条声明说它们不能够返回多行字符串,因此从头开始。我搬到了Flask,但目前Flask正在做同样的事情。我仍在学习python,可能是我做错了什么,但是我需要任何帮助才能使它正常工作。我想输出多行字符串。我了解您使用

""" or ''' 用于多行字符串,但是即使这样做并通过框架将其发送,它仍将作为连续的一行打印到屏幕上。我究竟做错了什么?作为最后的选择,如果我无法输出多行字符串,我将被迫将kickstart文件放入模板中。

Linux Python
分享到
取消 提交回答
全部回答(2)
  • 游客h2jwb5k5qe2pa
    2020-03-11 11:27:43

    ottle和Flask都可以处理多行字符串。

    0 0
  • 祖安文状元
    2020-02-23 16:33:40

    ottle和Flask都可以处理多行字符串。您的问题是,text/html默认情况下会将数据解释为数据,并且在HTML中,空白的任何组合在显示时都会折叠为一个空格。为了确保您的数据与发送的数据完全一样,您需要将Content-Type标头设置为text/plain。

    在烧瓶中:

    # If you want *all* your responses to be text/plain
    # then this is what you want
    @app.after_request
    def treat_as_plain_text(response):
        response.headers["content-type"] = "text/plain"
        return response
    
    # If you want only *this* route to respond
    # with Content-Type=text/plain
    @app.route("/plain-text")
    def a_plain_text_route():
        response = make_response(getKickstartFile())
        response.headers["content-type"] = "text/plain"
        return response
    
    

    瓶装:

    @route("/plain-text")
    def plain_text():
        response.content_type = "text/plain"
        return """This
                  multi-line string
                  will show up
                  just fine"""
    
    0 0
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程