1

我正在为大学生构建一个网络应用程序。我现在在主屏幕上——用户将选择他们的部门(即 CSE)、班级(即 CSE 101)和教授(如果有多个/班级)。

所以流程看起来像这样 ECON --> ECON 101 --> Prof. 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 页面上显示所有部门、课程和教授。但我无法正确链接部门 -> 课程 -> 教授 b/c 我目前所拥有的只是页面上显示列表的 1 for 功能。

有没有办法解决?也许是一个更好的 jQuery 插件?或者我该如何补救?如果不清楚,请告诉我,或者我可以提供更多上下文。

4

1 回答 1

2

您需要使用重组标签。例如:

<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请求。

于 2012-12-22T15:52:58.430 回答