2016-07-19 15 views
0

Ich schreibe ein kleines Webportal, das es Benutzern ermöglichen wird, Text für ein Computerlinguistikprojekt zu kommentieren und ihre Anmerkungen in einer Datei zu speichern.Ich speichere den Inhalt einer <textarea> Datei mit Flasche

Ich habe Probleme, den geänderten Text zu speichern.

Meine Seite lautet:

from bottle import template 
from project import app 
from bottle import request 
from bottle import redirect 
import random 


@app.route('/') 
def index(): 
    notices = 'This is a placeholder text for StackOverflow' 
    return template('annotator/index', package=notices) 


@app.route('/annotator/submit', method=['GET']) 
def submit(): 
    with open('output.txt', 'w') as outfile: 
     package = str(request.GET.get('package')) 
     outfile.write(str(package)) 
     redirect('/') 

Das Layout meiner Seite lautet:

<!doctype html> 
<head> 
    <link rel="stylesheet" type="text/css" href="/css/style.css"> 
    <title>My App</title> 
</head> 
<body> 
    <div class="page"> 
     <h1>NM Annotator Demo V 0.1</h1> 
     % if package is not '': 
     <form action='annotator/submit', method="GET"> 
    <textarea name="package" ROWS=20 COLS=70>{{package}}</textarea> 
    <td><INPUT TYPE=SUBMIT name="package" VALUE="Submit"></td> 
    </form> 
     %end 
     %include 
    </div> 
</body> 

Und einreichen Seite lautet:

<form action="annotator/submit" method="post"> 
<dl> 
Thank you 
</dl> 
</form> 
%rebase layout/layout 

jedoch nur die das Wort "submit" wird gespeichert i n die Datei - nicht der Inhalt der - was ich gespeichert werden möchte, da dies das Ergebnis der Annotation sein wird.

Dies ist meine erste Web-App, und ich bin ein bisschen verwirrt.

Antwort

1

Ihr Textbereich und Ihre Formulareinreichungen werden beide als "Paket" bezeichnet.

Ihre Taste, um diese zu ändern und sehen, ob das hilft:

<INPUT TYPE=SUBMIT name="submit" VALUE="Submit"> 

EDIT: Erläuterung

Das Problem zwei Formularelemente mit aufweist, die den gleichen Namen haben, ist, dass Ihre Anwendung empfängt sie beide in der Abfragezeichenfolge. Zum Beispiel

http://yourserver.com/annotator/submit?package=sometext&package=Submit

In der App werden Sie effektiv eine dict der Abfrage args erhalten, und es wird entweder aussehen {'package': 'sometext'}oder{'package': 'Submit'}. Welche Sie erhalten, hängt vollständig von der Anwendung ab (Bottle), aber die wahrscheinlichste Implementierung - um die Abfrageargumente in Reihenfolge zu verarbeiten - würde dazu führen, dass der zweite Wert Vorrang hat, da er den ersten überschreibt.

Die meisten Web-Frameworks bieten eine Möglichkeit, alle Abfrageargumente für einen bestimmten Namen abzurufen. in der Flasche ist es request.query.getall. So würde request.query.getall('package')['sometext', 'Submit'] zurückgeben. Aber in Ihrem Fall ist es viel sinnvoller, die Namenskollision an erster Stelle zu vermeiden, anstatt sie zu behalten und dann mehrere Werte abzurufen.

Hoffe, dass hilft!

+0

Danke, es hat gut funktioniert! Könntest du mich auf eine Erklärung hinweisen, warum das funktioniert? Ich weiß nicht viel über Webentwicklung? –

+1

Sicher, Erklärung hinzugefügt. –