Wie übergebe ich Variablen von einer Ansicht zur anderen und rendere mit der URL der letzten Ansicht in Django?
Ich baue mit Django ein Studentenverwaltungssystem auf.
In diesem Code sucht der Benutzer nach einem Schüler mit der verschlüsselten Abfragename=StudentName&grade=Grade&id=StudentID&phone=ParentPhoneNumber&report=StudentReportNumber
, das wird mit dem @ extrahiedecrypt()
Methode
Hier sind die beiden Methoden, die die Abfrage verarbeiten und die, die das Schülerprofil anzeigt.
Keine Daten aus der Abfrage werden in der Datenbank gespeichert, aber zum Abfragen der Schülerdaten aus der Datenbank verwendet.
def process_query(request):
# process the query from the url /?details={{ some hashes here }}
if request.method == 'GET':
raw_deatils = request.GET.get('details', None)
if raw_deatils:
details = decrypt(raw_deatils)
# decrypt is a function that is defined
# in the utils which takes the input string,
# check predeifined tests to test if valid.
# and return the decrypted query string else None
if details:
# now the decrypted message looks something like this.
# name=StudentName&grade=Grade&id=StudentID&phone=
# ParentPhoneNumber&report=StudentReportNumber
# some more processing pulls out value to variables,
name = details['StudentName'],
grade = details['Grade'],
student_id = details['StudentID'],
phone = details['ParentPhoneNumber'],
report = details['StudentReportNumber'],
search_token = details['token']
return redirect("somewhere I'm stuck")
else:
# encryption error, so redirect user to query page
else:
# error with submission redirect to query page
else:
# error with method. redirect to homepage.
def student_profile(request, name=None, grade=None, student_id=None):
# token to be added??
# some data processing to get marks,
# progress report. etc
if student_id:
context = {
'name' : name,
'grade' : grade,
'student_id' : student_id,
'report' : report,
'marks': {
# another dictionary of dictionaries
# as the product of the processing
},
'token' : token,
'attendance': {
# another dicitonary of stuff.
}
else:
context = {
'name' : name,
'grade' : grade,
}
return render(request, 'students/profile/single.html', context)
urls dafür,
url(r'^go/$', 'students.views.process_query' name='process_view'),
url(r'^profile/(?P<name>[a-zA-Z]{1,20})/(?P<grade>[a-zA-Z]{1,20})$',
'students.views.student_profile', name='profile_view'),
wheneverprofile_view
wird ohne 'process_view' aufgerufen, nur der Name und die Note sollten angezeigt werden. Wenn dasprofile_view
wird vom @ initiieprocess_view
Der Kontext mit Anwesenheit und Noten sollte gerendert werden.
Dies funktioniert bis zumprocess_view
umleiten, aber ich habe keine Ahnung, wo ich umleiten soll (oder sollte ich überhaupt umleiten?stecke) und das @ aufrufprofile_view
.
So die Zusammenfassung der Frage,
Wie leite ich von @ uprocess_view
zuprofile_view
ohne Daten zu verlieren, die in @ gesammelt wurdprocess_view
zumprofile_view
und rendere den Inhalt mit der URL vonprofile_view
? Ich will das @ nictoken
undstudent_id
wird in der URL angezeigt.
Vielen Dank für alle Vorschläge / Hilfe.