我正在为大学生构建一个Web应用程序。我现在所处的是主屏幕 - 用户将选择他们的部门(即CSE),班级(即CSE 101)和教授(如果有多个/班级)。
所以流程看起来像这个ECON - > ECON 101 - > X教授。
所以我有3个模特,系,课程,教授
class Department(models.Model):
subject = models.CharField(max_length = 25)
class Course(models.Model):
department = models.ForeignKey(Department)
number = models.CharField(max_length = 50)
name = models.CharField(max_length = 100, blank = True, null = True)
class Professor(models.Model):
course = models.ForeignKey(Course)
name = models.CharField(max_length = 50)
我用3个视图构建了这个。我的第一个视图显示了所有部门。根据用户点击的部门,它将加载一个新页面,显示与该部门相关的所有课程。然后,当用户点击课程时,它会加载一个新页面,显示与该课程相关的所有教授。
#urls.py
url(r'^$', 'index'),
#views.py
def index(request):
a = Department.objects.all()
return render_to_response('qanda/index.html', {'departments': a})
#index.html
{% for department in departments %}
<li><a href="/home/{{ department.id }}/">{{ department.subject }}</a></li>
{% endfor %}
#urls.py
url(r'^(?P<department_id>\d+)/$', 'courses'),
#views.py
def courses(request, department_id):
a = Department.objects.get(pk = department_id)
b = Course.objects.filter(department = a)
return render_to_response('qanda/courses.html', {'department':a,'courses':b})
#courses.html
{% for course in courses %}
<li><a href="/home/{{ department.id }}/{{ course.id }}/">{{ course.department }} {{ course.number }} {{ course.name }}</a></li>
{% endfor %}
等等。
既然它有效,我想让它看起来更好一些,所以我是一个jQuery插件,jGlideMenu(参见示例)。为了使插件工作,我需要在1个HTML页面上显示所有部门,课程和教授。但我无法正确链接deparment - &gt;当然 - &gt; b / c教授目前我只是在页面上显示列表的1个功能。
这有什么办法吗?也许是一个更好的jQuery插件?或者我该如何解决这个问题?如果不清楚或者我可以提供更多背景,请告诉我。
答案 0 :(得分:2)
您需要使用regroup标记。例如:
<ul id="departments">
{% for department in departments %}
<li rel="department_{{ department.id }}">{{ department.name }}</li>
{% endfor %}
</ul>
{% regroup courses by departments as department_list %}
{% for department in department_list %}
<ul id="department_{{ department.grouper.id }}">
{% for course in department.list %}
<li rel="course_{{ course.id }}">{{ course.name }}</li>
{% endfor %}
</ul>
{% endfor %}
教授也一样。如果有大量数据,最好使用ajax请求。