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