django: how can i make a generic list view see a regular model?
Sorry if this is a dumb way to ask this... I have a generic list view for the homepage of a site, and would like to use a "homepage" model for informative text on that same page...is it possible? Thanks for your help.
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': Sch开发者_运维问答ool.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),
)
I'm not sure what you mean when you say you would like to "use" the homepage model with the generic list view. If you simply want access to all instances of Homepage
, you can add the following to info_dict in your urls.py:
info_dict = {
'queryset' : School.objects.all(),
'extra_context' : {'school_list' : School.objects.all(), 'homepage_list' : Homepage.objects.all()}
}
You can use a similar technique if you want to pass a specific instance of Homepage
to the generic view:
...
'extra_context' : {'school_list' : School.objects.all(), 'homepage' : Homepage.objects.filter(id = 1).get()}
Finally, if you want something more complex (like a dynamic id
to be used on the filter), you can always define a custom view, and then call object_list
from within that view, like:
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)
精彩评论