2016-03-31 18 views
0

Listede çalışıyorum bir blog projesinde beklendiği gibi render almakta zorluk çekiyorum.ListView'de get_queryset() yöntemini kullanma, Django 1.9

aşağıdaki
class Post(models.Model): 
    (...) 
     tags = models.ManyToManyField(Tag) 

views.py yılında TagListView gibidir:

class TagListView(ListView): 
    def get_queryset(self): 
     slug = self.kwargs['slug'] 
     try: 
      tag = Tag.objects.get(slug=slug) 
      return tag.post_set.all() 
     except Tag.DoesNotExist: 
      return Post.objects.none() 
(models.py benim Mesaj modelinden) aşağıdaki gibi

Ben bir Mesaj modelinin bir parçası olan bir Etiket modeli var aşağıdaki gibi

url en url(r'^blog/?', include('blog.urls')), olsa olduğu gibi aşağıdaki gibi projede dahil edildiği (geçerli:

url(r'^tag/(?P<slug>[a-zA-Z0-9-]+)?/?$', TagListView.as_view(
     paginate_by=5, 
     model=Tag, 
    )), 

Anladığım kadarıyla, bu örnekte, localhost:8000/blog/tag/<name-of-tag-here> adresinde olması gereken bir URL'ye erişerek, view.py'de TagListView öğesini çağırır, daha sonra aynı sümüklü bir etiket içeren bir ListView gönderimi oluşturmak için get_queryset() yöntemini kullanır. Daha sonra bir şablonu (/blog/templates/blog'da) görüntülediğim öğreticide, tag_post_list.html olarak adlandırılır, ancak - ListView'in bir şablon oluşturması için nasıl bir şablon bulduğu belirsizdir ve basit bir eğiticiyi takip ediyorum. .

Hangi değişkenlerin html şablonuna aktarıldığına ve bunlara nasıl erişileceğine dair biraz kafam karışık. Aldığım sonuçlardan, get_queryset()'un aslında yalnızca aynı etiket listesiyle gönderilen yayınları geri almadığı açıktır. Furthermore, my css isn't rendering, either (which I've made a separate post for), base.html dosyamdan diğer etiket ve elementlerin açıkça belli olmasına rağmen.

Şablon, {% extends 'base.html' %} (/blog/templates/'da bulunur) başlar ve {% for post in object_list %} aracılığıyla gönderilen iletilere erişir. object_list açıkçası, ne düşündüğüm kadarıyla, ListView'ın get_queryset() yöntemini kötüye kullandığım şekilde olması gerektiğini düşündüğüm şeyi içermiyor.

Teşekkürler.

+0

Burada bazı hata ayıklama yok. Bu görüşün aslında çağrıldığından emin oldunuz mu? Sülük argümanının doğru olduğundan emin oldunuz mu? Kod, get_queryset'e mi giriyor?Bu yöntemden iade edilenleri incelediniz mi? Tüm bunları hata ayıklayıcı ile yapabilir ya da sadece yazdırma ifadeleri koyarak ilgili noktalarıdır. –

+0

Diğer her şeyden ayrı olarak, bu Etiketlerin değil, Gönderilerin bir listesidir, bu nedenle model Post olmalıdır. Bu olsa da, hiçbir şeyi etkilemez. –

+0

'object_list' aslında neyi içerir? Hiçbir şey değil? Başka bir şey? – YPCrumble

cevap

2

Paketini açmak için çok fazla soru var. Birkaç cevaplar:

class TagListView(ListView): 

    template_name = "tag_post_list.html" 

    def get_queryset(self): 
     slug = self.kwargs['slug'] 
     try: 
      tag = Tag.objects.get(slug=slug) 
      return tag.post_set.all() 
     except Tag.DoesNotExist: 
      return Post.objects.none() 

sınıf temelli görünümler için kullanılabilir özelliklerin hızlı bir listesi için this site bakınız:

Sizin ListView bunu gibi kullanmak için şablonu belirtebilirsiniz bir template_name niteliği vardır.

İkinci cevaplama - söylüyorsun:

tag = Tag.objects.get(slug=slug) 
return tag.post_set.all() 

... görünümünüzü gerçekte doğru Post nesneleri cevap vermiyor içinde. Kodunuzdan neden böyle olduğu açık değil. Daniel Roseman'ın muhtemelen Tag modelini değil Post modelini temel alması gerektiğine işaret ediyor. get_queryset yönteminin Post nesnelerini döndürme yöntemini geçersiz kılması, bunun sorun teşkil eden sorun olmadığı anlamına gelir. İlk sorunun giderilmesi aslında ikinci düzeltebilir, çünkü object_list hiçbir zaman çağrılmadı çünkü şablon çağrılmıyordu ...

+0

Teşekkürler. Bağlantı, belgelerin eksik olduğunu açıklar. "template_name =" tag_post_list.html "ifadesini eklediğim gibi görünüyor, aradığım sonuçları aldım, bu aslında bana pek bir anlam ifade etmiyor, şimdi düşünüyorum. Şimdi bu statik dosyaları sorunu çözmek için. –

İlgili konular