2010-02-16 3 views
0

Désolé, c'est une façon stupide de demander cela ... J'ai une vue liste générique pour la page d'accueil d'un site, et je voudrais utiliser un modèle "page d'accueil" pour le texte informatif sur cette même page ... c'est possible? Merci de votre aide.django: comment puis-je faire une vue liste générique voir un modèle régulier?

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), 
) 

Répondre

1

Je ne suis pas sûr de ce que vous voulez dire quand vous dites que vous voulez "utiliser" le modèle de page d'accueil avec le générique vue de liste. Si vous voulez simplement avoir accès à toutes les instances de Homepage, vous pouvez ajouter ce qui suit à info_dict dans votre urls.py:

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

Vous pouvez utiliser une technique similaire si vous voulez passer une instance spécifique de Homepage au générique vue:

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

Enfin, si vous voulez quelque chose de plus complexe (comme une id dynamique à utiliser sur le filtre), vous pouvez toujours définir une vue personnalisée, puis appeler object_list à partir de ce point de vue, comme:

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) 
+0

Merci beaucoup! Je pense que je le rendais plus difficile que nécessaire. Votre première suggestion a parfaitement fonctionné, et je garderai les autres pour quand je dois faire quelque chose de plus avancé. Merci encore. – tomwolber

Questions connexes