2017-03-15 3 views
1

Ich versuche herauszufinden, wie die ursprünglichen Felddaten zusammen mit dem Ergebnis auf meiner Ergebnisseite angezeigt werden. Ich habe eine App in Django geschrieben, die zwei HTML-Seiten hat. Eine Eingabeseite und eine Ergebnisseite. Die Eingabeseite hat ein Formular. Die Ergebnisseite hat die Ausgabe. Hier ist der Code, den ich an der richtigen Stelle:Referenz Ursprüngliche Postdaten in Django

models.py

class IssuingCA (models.Model): 
    ICA_name = models.CharField(max_length=200) 
    filepath = models.CharField(max_length=200) 
    def __str__(self): 
     return self.ICA_name 

views.py (vereinfachte Version)

def index(request): 
    issuers = IssuingCA.objects.order_by('ICA_name') 
    issuerOptions = {'issuers': issuers} 
    return render(request, 'index.html', issuerOptions) 

def results(request): 
    issuer = request.POST['selectedIssuer'] 
    issuername = 'Where I want the ICA_name value "icas" displayed' 
    info = {'issuer': issuer, 'issuername': issuername} 
    return render(request, 'results.html', info) 

index.html

--snip-- 
<label for="selectedIssuers">Issuing CA</label> 
    <select id="selectedIssuers" name="selectedIssuers"> 
    {% for icas in issuers %} 
    <option value="{{ icas.filepath }}">{{ icas }}</option> 
    {% endfor %} 
--snip-- 

results.html

--snip-- 
<div>{{ issuer }}</div> 
<div>{{ issuername }}</div> 
--snip-- 

Lassen Sie uns ein paar Beispieldaten für die DB einrichten: ICA_Name = "Eichhörnchen"; filepath = „in/some/Wald

Die Art und Weise der Anwendung funktioniert, ist, dass es ein Drop-Down in der index.html-Seite, die die ICA_name aller Werte anzeigt präsentiert. Wenn Sie die ICA_name, in diesem Fall "Eichhörnchen" wählen und abschicken, übergibt es den Wert der Option als filepath für Eichhörnchen - "in/einige/Wald", die ich über POST anfordere und es auf der Ergebnisseite anzeigt. Was ich will, ist ein Weg, um auch den ursprünglichen Wert von Eichhörnchen auf der Ergebnisseite zu zeigen, so dass für issuer, der Text in den <div> zeigt Eichhörnchen (dies funktioniert zur Zeit) und für IssuerName, der Text in den <div> zeigt in/einige/Wald.

Antwort

0

Wenn Sie es manuell tun müssen, setzen Sie den Primärschlüssel der IssuingCA Instanz im value= Attribut des <option>,

<option value="{{ icas.pk }}">{{ icas }}</option> 

und dann die Instanz zurück in den Ergebnissen erhalten:

issuing_ca = IssuingCA.objects.get(pk=request.POST['selectedIssuers']) 
info = {'issuer': issuing_ca.filepath, 'issuername': issuing_ca.ICA_name} 

Aber wenn Sie Django verwenden, werden Sie definitiv wollen seine Formulare verwenden. Hier

ist ein Tutorial: https://docs.djangoproject.com/en/1.10/intro/tutorial04/

und hier ist die komplette Dokumentation: https://docs.djangoproject.com/en/1.10/topics/forms/

Django bietet bessere Möglichkeiten, Eingabedaten zu verwalten, die Sie gegen alle Arten von Gefahren zu schützen. Die

+0

Hmm .. Ich habe nie darüber nachgedacht, den PK-Wert zu verwenden und die Felder davon abzurufen. Ich wusste auch nicht, dass Sie {issuer: issuing_ca.filepath} schreiben könnten. Du hast mir etwas Neues beigebracht! Ich habe das gerade getestet und es funktioniert! Vielen Dank! Ich habe mich vorher mit Formularen befasst und beabsichtige, meine Anwendung zu aktualisieren, um sie in einer zukünftigen Version zu verwenden. – Eddi

+0

mach es so schnell wie möglich, warte nicht. Selbst wenn es nicht für die Sicherheitsmerkmale ist, spart es viel Zeit, insbesondere wenn der bereits geschriebene Code (der immer die Hauptszeitsenke ist) beibehalten/erweitert wird. –