2

我是 Django 新手,正在尝试将表单的结果输出到带有缩进的文本文件中。我已阅读文档,只能找到编写 CSV 输出的作者。最终,我试图根据表单的输入生成可下载的 Python 脚本。由于 Python 需要准确的缩进,因此我无法正确输出。

这是我用来生成输出的部分观点:

if form.is_valid():
        ServerName = form.cleaned_data.get('ServerName')
        response = HttpResponse(mimetype='text/plain')
        response['Content-Disposition'] = 'attachment; filename=script.py' 
        writer = csv.writer(response)
        writer.writerow(['def ping ():'])
        writer.writerow(['run ('ping ServerName')])
return response

我希望 script.py 的输出是这样的:

def ping():
    run('ping server01')

问题:

  1. 我是否使用正确的编写器输出到文本文件?
  2. 如何在输出中添加缩进?
  3. 如何在输出中添加括号即:( ) 或引号' '而不会在视图中出现错误。

谢谢。

4

2 回答 2

1

如果您只是希望能够写出文本的原始原始表示,同时也可以保护您免受可能的转义问题,只需使用三引号和一些简单的 dict 关键字格式:

ServerName = form.cleaned_data.get('ServerName')

py_script = """
def ping():
    run('ping %(ServerName)s')
""" % locals()

response.write(py_script)

或具有更多值:

ServerName = form.cleaned_data.get('ServerName')
foo = 'foo'
bar = 'bar'

py_script = """
def ping():
    run('ping %(ServerName)s')
    print "[%(foo)s]"
    print '(%(bar)s)'
""" % locals()

response.write(py_script)
于 2012-08-16T02:17:13.043 回答
0

文档中:

...如果要增量添加内容,可以将响应用作类似文件的对象:

response = HttpResponse()
response.write("<p>Here's the text of the Web page.</p>")
response.write("<p>Here's another paragraph.</p>")

因此,只需写信给您的回复:

response = HttpResponse(mimetype='text/plain')
response['Content-Disposition'] = 'attachment; filename=script.py'
response.write("def ping(): \n")
response.write("    run('ping server01')\n")
于 2012-08-16T01:58:31.943 回答