2017-02-06 4 views
0

私はDjangoのプレーンテキストを読み込み、それからテキストを書き込もうとしています。Django - プレーンテキストからの読み書き

基本的にファイルを開き、特定の単語を取得してから、それ以外のものを変更したいとします。

は、ここで私が持っているものです。ここで

def address_L1(): 
    file = open("interfaces.txt","r") 
    content = file.read() 
    file.close() 
    address = re.findall('address\s(.*?)\s',open('interfaces.txt','r').read()) 
    if address: 
     print address[0] 
    else: 
     print 'no Address found!' 
    return address[0] 

は、私はファイルを開いて、次の192.168.5.5あると完璧な作品addressに単語を検索しています。ここで

def get_interfaces(request): 
    address = str(address_L1()) 
    if 'address' in request.POST: 
     write_template(request)#This is for my writing function 
    return render(request, 'interfaces.html', {'address':address}) 

私は192.168.5.5は、テンプレートに表示されます、私は意味addressに何をテンプレートに渡しています。ここで

<form method="post" action="">{% csrf_token %} 
    <label for="your_name">Address: </label> 
    <input id="your_name" type="text" name="address" value="{{ address }}"> 
    <br> 
    <input type="submit" class="btn btn-success btn-xs" value="Guardar Cambios"> 
</form> 

は私が私の変数を表示していた私のhtmlです、私の192.168.5.5または何address変数であるが表示されます入力Addressがあります。

これまでのところすべてうまくいきます。

今、私はプレーンテキストに書き込もうとしています。ここで

def write_template(request): 
    if request.method == 'POST': 
     get_address = address_L1() 
     change_address_L1 = request.GET.get("address", None)#Doing something with my input field in template 
     filedata= None 
     with open('interfaces.txt', 'r') as f: 
      filedata = f.readlines() 
      filedata=filedata.replace(get_address , change_address_L1) 
      with open('interfaces.txt', 'wb') as f: 
       f.writelines(filedata) 
    return render(request, 'interfaces.html') 

は基本的に私は私のinput addressに何を取得し、私が入力したものは何でも私は192.168.5.5と私の入力を参照してくださいでしょう私のコードを実行したときに、私が意味するために置き換えるされ何をしたいのか、私にはその値を削除し、192.168.0.0を入力します私の価値を変える。試してみると、このエラーが発生します:

'list' object has no attribute 'replace'

どうすればこの問題を解決できますか?どうすれば私のプレーンテキストを正しく書くことができますか? 私は何が間違っていますか? ありがとうございます!

答えて

2

エラーとして、filedataがリストです。これは、f.readlines()があなたにリストを提供するからです。各要素はファイル内の行です。

全体を1つの文字列にしたい場合は、代わりにf.read()を実行してください。

+0

ありがとうございました。私が 'filedata = filedataを試してみると' change_address_L1 = request.GET.get( "address"、None) 'のために、'文字列やその他の文字バッファオブジェクトを期待しました。 replace(get_address、 '0.0.0.0') 'は期待通りに機能しますが、' change_address_L1'のために 'get_address'を置き換えたいと思います。これをどうすれば解決できますか? – User100696

+0

フォームのアクションは "post"なので、その値は 'request.GET'ではなく' request.POST'になります。 –

+0

ダニエルありがとう、私のアイテムを変更しましたが、その後、このリストの範囲を外れました – User100696

関連する問題