【问题标题】:How to Iterate over model instance? django如何迭代模型实例? django
【发布时间】:2015-10-22 20:03:29
【问题描述】:

我正在尝试迭代模型实例。 我想得到这个: 标题1 标题2

我实际得到的 标题1 标题1 标题1 标题1 标题1 标题1

似乎是什么问题?

view.py

from django.shortcuts import get_object_or_404,

from .models import Paper 

def detail(request, slug):
    paper = get_object_or_404(Paper, slug=slug)
    return render(request, 'papers/detail.html', {'paper': paper})

models.py

from django.db import models
from django.template.defaultfilters import slugify

class Paper(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField()
    description = models.CharField(max_length=300)


    def __str__(self):
       return self.title

    def save_in(self):
        if not self.id:
            self.slug = slugify(self.title)

        super(test, self).save()

detail.html

{% extends "master2.html"  %}

{% block h1 %}
    <div id="g">
        <div class="container">
            <div class="row">
                <h3>{{ paper.title }}</h3> 
                <br>
                <br>
                 <div class="col-xs-12 "><p>{{ paper.large_description }}</p></div>
            </div>
        </div>
     </div>
{% endblock %}

{% block title  %} Detail {% endblock %}

nav.html

            {% for title in paper.title %}
                <a href="{% url 'detail' slug=paper.slug %}">{{ paper.title }}</a>
            {% endfor %}

master2.html

<!DOCTYPE html>
<html>
    <head>
        <title>{% block title %}{% endblock %}</title>
        <link href="/static/font.min.css" rel="stylesheet">
        <link href="/static/bootstrap.min.css" rel="stylesheet">
        <link href="/static/font-awesome.min.css "rel="stylesheet">
        <link href="/static/main.css" rel="stylesheet">
    </head>        
    <body data-spy="scroll" data-offset="0" data-target="#theMenu"> 
        {% include "nav.html" %}           
        {% include "header2.html" %}
        {% block h1 %}{% endblock %}
    <script src="/static/jquery.js"></script>
    <script src="/static/bootstrap.min.js"></script>
    <script src="/static/jquery.isotope.min.js"></script>
    <script src="/static/jquery.prettyPhoto.js"></script>
    <script src="/static/main2.js"></script>
</body>

【问题讨论】:

  • 如何迭代单个事物?您的 Paper 对象只有一个标题;你为什么期待多个标题?
  • 我正在尝试按标题从我的数据库中获取 2 个元素。
  • 那么你为什么只“迭代”其中一个呢?你没有道理。

标签: python django


【解决方案1】:

当你这样做时

{% for title in paper.title %} <!-- Im assuming you already have a
                                    {% for paper in paper_list %} statement 
                                    because a "paper" variable is not even
                                    passed to the template, "paper_list" was
                                    passed to the template. -->

    <a href="{% url 'detail' slug=paper.slug %}">{{ paper.title }}</a>
{% endfor %}

您正在迭代一个 CharField(paper.title 是一个 CharField)。然后对于paper.title 中的每个字母,您将显示标题,这就是为什么您始终只获得 title1 的原因。要遍历所有 Paper 对象,然后显示每个 Paper 对象的标题,请执行以下操作:

{% for paper in paper_list %}
     <a href="{% url 'detail' slug=paper.slug %}">{{ paper.title }}</a>
 {% endfor %}

【讨论】:

  • @Ivic 如果没有任何反应,则表示您的数据库中尚不存在 Paper 对象。你创建了Paper 对象了吗?当你打开 python shell 并执行 &gt;&gt;&gt;paper_list = Paper.objects.all() for i in paper_list: print(i) 它会打印什么?编辑:另外,看看我再次发布的代码。我对代码进行了一些编辑,您可能正在使用我的代码的未编辑版本。再试一遍。还是不行吗?
  • 你有时间聊天吗?
  • @Ivic 当然,创建聊天室。你也可以在这里回复,让我知道什么仍然不起作用。
  • 我觉得我没有名气。
  • 我进行了迁移。我可以在管理员中看到 Paper 对象。我用了你的新代码,还是一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 2013-12-17
  • 2021-12-09
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多