django:我怎样才能使通用列表视图看到常规模型?

时间:2010-02-16 01:11:31

标签: django django-models django-views

对不起,如果这是一个愚蠢的方式来问这个...... 我有一个网站主页的通用列表视图,并希望在同一页面上使用“主页”模型提供信息性文本...是否可能?谢谢你的帮助。

models.py

from django.db import models


class School(models.Model):
    school_name = models.CharField(max_length=250, help_text='Maximum 250 characters.')
    slug = models.SlugField(unique=True)

    def __unicode__(self):
        return self.school_name

def get_absolute_url(self):
        return "/schools/%s/" % self.slug

class Student(models.Model):
    name = models.CharField(max_length=250, help_text='Maximum 250 characters.')
    slug = models.SlugField(unique=True)
    mugshot = models.ImageField(upload_to='mugshots')
    school = models.ForeignKey(School)  
    honor = models.TextField()

    def __unicode__(self):
        return self.name

    def get_absolute_url(self):
        return "/student/%s/" % self.slug

class Homepage(models.Model):
    title = models.CharField(max_length=250, help_text='Maximum 250 characters.')
    content = models.TextField() 

    def __unicode__(self):
        return self.title

urls.py

from django.conf.urls.defaults import *
from achievers.apps.students.models import School, Student
from achievers.apps.students.views import hello

from django.contrib import admin
admin.autodiscover()

info_dict = {
    'queryset': School.objects.all(),
    'extra_context': {'school_list': School.objects.all,}    
}

info_dict2 = {
    'queryset': Student.objects.all(),
    'template_name': 'students/student_detail.html',
    'extra_context': {'student_detail': Student.objects.all}    
}

urlpatterns = patterns('',
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': 'static'}),
    (r'^student/(?P<slug>[-\w]+)/$', 'django.views.generic.list_detail.object_detail', info_dict2), 
    (r'^students/(?P<slug>[-\w]+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
    (r'^$', 'django.views.generic.list_detail.object_list', info_dict),
    (r'^admin/', include(admin.site.urls)),
    (r'^hello/', hello),
)

1 个答案:

答案 0 :(得分:1)

当您说要使用通用列表视图“使用”主页模型时,我不确定您的意思。如果您只想访问Homepage的所有实例,可以在urls.py中将以下内容添加到info_dict:

info_dict = {
    'queryset' : School.objects.all(),
    'extra_context' : {'school_list' : School.objects.all(), 'homepage_list' : Homepage.objects.all()}
}

如果要将Homepage的特定实例传递给通用视图,可以使用类似的技术:

...
'extra_context' : {'school_list' : School.objects.all(), 'homepage' : Homepage.objects.filter(id = 1).get()}

最后,如果您想要更复杂的内容(例如在过滤器上使用动态id),您始终可以定义自定义视图,然后在该视图中调用object_list,例如:

def my_view(request, dynamic_id):
    info_dict = {..., 'extra_context' : {..., 'homepage' : Homepage.objects.filter(id = dynamic_id).get()}}
    return django.views.generic.list_detail.object_list(**info_dict)