2017-08-15 65 views
2

我在django中創建了這個應用程序,我試圖使其生效。這是index.html頁面 如果在Django模板中已知其他屬性值,則顯示其他屬性值

<html> 
<head> 
    <title>The index page</title> 
</head> 
<body> 
    <h1>Choose the name of student</h1> 
    <form action= "{% url 'detail' %}" method="post" enctype="multipart/form-data"> 
    {% csrf_token %} 
      <select name="namedrop"> 
       {% for name in student_list %} 
       <option value={{name.stuname}}>{{name.stuname}}</option> 
       {% endfor %} 

      </select> 

    <input type="submit" name="submit"> 
    </form> 
</body> 
</html> 

,這是detail.html頁面,當我們選擇一個名稱,然後單擊提交按鈕,它是針對...

<!DOCTYPE html> 
<html> 
<head> 
    <title>Details of student </title> 
</head> 
<body> 
    <p>hello {{name}}</p> 

    <style type="text/css"> 
     p 
     { 
      color: blue; 
     } 

    </style> 
</body> 
</html> 

,而只顯示「你好NEHA」如果選擇的名稱是「NEHA」 ......但我想它來打印這名學生從桌子學生的所有細節......這是models.py ...

from django.db import models 

class course(models.Model): 
    cid=models.IntegerField(unique=True,default=0) 
    cname=models.CharField(max_length=50) 


    def __unicode__(self): 
     return self.cname 

    class Meta: 
     db_table= "course" 


class student(models.Model): 
    stuid=models.IntegerField(default=0) 
    stuname=models.CharField(max_length=50) 
    cid=models.ForeignKey(course,to_field='cid',on_delete=models.CASCADE) 

    def __unicode__(self): 
     return self.stuname 

    class Meta: 
     db_table= "student" 

class subject(models.Model): 
    sid=models.IntegerField(default=0) 
    sub=models.CharField(max_length=50) 
    cid=models.ForeignKey(course,to_field='cid',on_delete=models.CASCADE) 
    class Meta: 
     db_table= "subject" 

    def __unicode__(self): 
     return self.sub 

這是views.py

from .models import student 
from django.http import Http404 
from django.shortcuts import render 
from django.template import loader 
from django.http import HttpResponse 


def index(request): 
    student_list=student.objects.all() 
    template = loader.get_template('studinfo/index.html') 
    context= { 'student_list' : student_list, } 
    return HttpResponse(template.render(context, request)) 


def detail(request): 
    if request.method=='POST': 
     name=request.POST['namedrop'] 
     idd=student.objects.all 
     return render(request, 'studinfo/detail.html', {'name':name}) 

另外我希望它通過details.html頁面顯示「neha」所有的主題...我該怎麼做?

+0

請顯示也使用模板的視圖 – PRMoureu

+0

views.py已經顯示。 – Shefali

+0

@Shefali它被刪除了在以前的編輯,我恢復它 –

回答

1

在您的索引模板中,您在表單中傳遞名稱,並在視圖中使用它將它傳遞給詳細模板。您需要獲取student對象並將其傳遞給詳細信息模板,以便您可以訪問其所有字段。你可以做這樣的事情(你可能會想添加更多的完整性檢查,例如確保學生存在的觀點

{% for student in student_list %} 
    <option value={{ student.id }}>{{ student.stuname }}</option> 
{% endfor %} 

然後:你可以通過傳遞ID的形式開始,而不是名稱):

def detail(request): 
    if request.method=='POST': 
     student_id = request.POST['namedrop'] 
     student_instance = student.objects.get(pk=student_id) 
     idd=student.objects.all 
     return render(request, 'studinfo/detail.html', {'student': student_instance}) 

現在,在詳細信息模板,你可以訪問student對象,並可以使用其所有屬性(例如{{ student.stuname }})。

既然有學生和學科之間沒有直接的聯繫,你必須要走過的歷程:

{% for subject in student.cid.subject_set.all %} 
    {{ subject }} 
{% endfor %} 
+0

是的,它在上下文中只有一個參數是更清潔的... – PRMoureu

+0

是的,它的工作..但我如何顯示學生的所有科目? – Shefali

+1

@Shefali通過'{{student.cid.subject_set.all}}'循環。 –

1

您需要在您的視圖detail選擇具有以下查詢學生:

student = student.objects.filter(stuname=name)[0] 

並將結果添加到上下文:在y中

return render(request, 'studinfo/detail.html', {'name':name, 'student': student}) 

然後我們的模板,你可以撥打

{{student.stuname}} or {{student.cid}} ... 
+1

我要指出'stuname'不是唯一的,但這是一個很好的觀點。在表格下拉菜單中,同樣名字的學生也無法辨別。 –

相關問題