如何使用Django模板定位特定对象

时间:2016-08-05 20:28:41

标签: django django-templates

我的models.py中有一个名为Features的类。在我的html中,我在右侧显示一个列表,其中排除了其中两个功能,一个是已选择的活动功能,另一个是最近添加的,因为它们是我页面的主要内容。列表中的其余功能按日期显示,并显示我期待的内容。 现在,我想在THAT列表中挑出第一,第二和第三个功能(仅限标题),这样我就可以将它们放在各自独立的div中 - 因为每个功能都有独特的css样式。可能有很多方法可以做到这一点,但我似乎无法找出它们中的任何一个。

This is a link到我的项目中,以便更好地了解我想要的内容(基本上是尝试将内容放在右边那些彩色框中。)

我只是在学习Django(以及Python),感谢您的耐心和帮助!

HTML

       {% for f in past_features %}
            {% if f.title != selected_feature.title %}
            {% if f.title != latest_feature.title %}
                <h1>{{ f.title }}</h1>
            {% endif %}
            {% endif %}
        {% endfor %}

视图

def feature_detail(request, pk):
    selected_feature = get_object_or_404(Feature, pk=pk)
    latest_feature = Feature.objects.order_by('-id')[0]
    past_features = Feature.objects.order_by('-pub_date')
    test = Feature.objects.last()
    context = {'selected_feature': selected_feature,
               'latest_feature': latest_feature,
               'past_features': past_features,
               'test': test}
    return render(request, 'gp/feature_detail.html', context)

模型

class Feature(models.Model):
    title = models.CharField(db_index=True, max_length=100, default='')
    content = models.TextField(default='')
    pub_date = models.DateTimeField(db_index=True, default=datetime.now, blank=True)
    def __str__(self):
        return self.title
    def __iter__(self):
        return [
            self.id,
            self.title ]

3 个答案:

答案 0 :(得分:1)

您可以将前三个功能存储在上下文中的单独变量中,也可以将检查添加到模板循环中,如{% if forloop.first %}{% if forloop.counter == 2 %}

答案 1 :(得分:0)

如果你想要的只是没有

  selected_feature
  latest_feature

past_features查询集中的这两个记录,然后您可以在past_features查询上使用exclude并传递selected_features和latest_feature对象的id。

views.py看起来像:

 def feature_detail(request, pk):
    selected_feature = get_object_or_404(Feature, pk=pk)
    latest_feature = Feature.objects.order_by('-id')[0]
    # Collect all the id's present in the latest_feature

    excluded_ids = [record.pk for record in latest_feature]
    excluded_ids.append(selected_feature.pk)

    #This would only return the objects excluding the id present in the list
    past_features = Feature.objects.order_by('-pub_date').exclude(id__in=excluded_ids)
    test = Feature.objects.last()
    context = {'selected_feature': selected_feature,
               'latest_feature': latest_feature,
               'past_features': past_features,
               'test': test}
 return render(request, 'gp/feature_detail.html', context)

Django提供了丰富的ORM并且有详细记录,请查看Queryset选项以获取更多信息。

答案 2 :(得分:0)

要访问 Django 模板中的特定对象,请参见以下示例:

要访问第一个对象,您可以使用 {{ students.0 }}

要访问第二个对象,您可以使用 {{ students.1 }}

要访问特定字段,例如对象 4 中的名字,您可以使用 {{ students.3.firstname }}

要访问第二个对象中的图像字段,您可以使用 {{ students.1.photo.url }}

要访问第一个对象中的 id,您可以使用 {{ students.0.id }}