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. ビューでエラーが発生することなく出力に括弧 ie:( ) または引用符を追加する方法。' '

ありがとう。

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 をファイルのようなオブジェクトとして使用できます。

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 に答える