2012-12-22 25 views
1

我正在爲大學生建立一個Web應用程序。我現在的主要屏幕是 - 用戶將選擇他們的部門(即CSE),班級(即CSE 101)和教授(如果有多個班級)。在第1頁上顯示多個相關蟒模型

所以流量將看起來像這樣ECON - > ECON 101 - >十教授

所以我有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 - >課程 - >教授b/c,目前我所有的功能都只是在頁面上顯示列表。

有沒有辦法解決這個問題?也許一個更好的jQuery插件?或者我該如何補救?如果不清楚,請告訴我,或者我可以提供更多的上下文。

+1

使用[django smart選擇](https://github.com/digi604/django-smart-selects)。 –

回答

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

+0

實際上只是試過了,雖然我可以加載第一個列表,但我無法加載以下列表中的任何一個 - 我對分組的理解是,您可以採用現有列表並按特定屬性對其進行重新分組。但在我的索引頁面上,下一個列表根據用戶之前點擊的屬性填充 - 例如,如果有人點擊了Econ,則下一頁將填充與Econ相關的類別列表。請參閱問題中的#views.py。重組是否仍然適用於此? –

+0

要構建完整菜單,您應該返回索引視圖中的所有部門,課程和教授。 'render_to_response('qanda/index.html',{'departments':Department.objects.all(),'courses':Course.objects.all(),'professor':Professor.objects.all()})'' – sneawo

相關問題