2017-08-15 30 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'不是唯一的,但这是一个很好的观点。在表格下拉菜单中,同样名字的学生也无法辨别。 –

相关问题