在不使用循环django 1.8的情况下获取类中的所有对象

时间:2015-06-14 19:16:38

标签: python django

我有一个模板navbar.html,我在其中存储导航栏的模板,然后将其包含在index.html中,这是基本模板。

views.py

class NaverDetailView(generic.DetailView):
model = Naver
naver = Naver.objects.order_by('-artist_name')[:10]
template_name = 'feature/detailgenrenaver.html' 
context_object_name = 'naver'   

detailnaver.html

<div id="wrapper1">
<iframe width="1024" height="500" src="{{ naver.videoid }}" frameborder="0"   allowfullscreen></iframe>
</div>

navbar.html

 {% for navloop in naver_set.all %}
 <nav class="navbar" data-tap-toggle="false" role="navigation">
   <div class="col_2 rightside">
          <img src="img/rafa.jpg" width="120" height="83">
          <p>image1</p>

          <img src=naver.videoimage" width="120" height="83" >
          <p>naver.artist_name</p>
    </div>
 </nav>
 {% endfor %}

urls.py

urlpatterns = [

url(r'^$', views.rock_and_feat, name='rock_and_feat'),
url(r'^trending/(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='naver'),
]

index.html

<html>
<head>{% include "feature/navbar.html" %}</head>
<body></body>
</html>

我的问题是,当我在for中使用navbar.html循环时,会列出Naver中的所有对象,但我希望能够单独引用这些对象id引用如naver.videoimage(id=1)或类似的东西,没有for循环,因此它不会多次列出对象。

1 个答案:

答案 0 :(得分:0)

您可以将对象选择过滤为仅包含视图中所需的项目。然后只将选定的项目传递到模板上。

假设我有一个名为get_by_pk的项目,其中包含一个名为by_pk的应用程序。这是by_pk模型的文件:

/get_by_pk/by_pk/models.py

from django.db import models

class Naver(models.Model):
    value_to_reference = models.CharField(max_length=10,primary_key=True)
    another_field = models.TextField(max_length=500)

然后在您的视图中,您可以选择一个子集 /get_by_pk/by_pk/views.py

from by_pk.models import Naver

    #...whatever view you want
    only_these = ['a', 'b', 'c']
    filtered_objects = Naver.objects.filter(value_to_reference__in=only_these).values()
    #pass filtered_objects to template

以下是有关查询模型的链接: https://docs.djangoproject.com/en/1.8/topics/db/queries/