从数据库中迭代记录(第一次重复记录)

时间:2015-10-24 19:26:30

标签: python django

我有一个应用程序,其中Paper(Paper将是一个库)有多本书。我想显示一个侧栏,按标题列出书籍:

HOBIT
LOTR

当我浏览localhost时,我得到一个只有一条记录重复的侧边栏:

HOBIT 
HOBIT
HOBIT
HOBIT
HOBIT

我认为我的循环在nav.html中一定有问题。

我是Python和Django的新手,我在循环python,django文档和堆栈溢出方面做了大量工作,但我在将其实现到当前代码时遇到了问题。如果我发布了很多代码,我很抱歉,但我希望你能看到更大的图片。

感谢您的时间。

views.py

from django.shortcuts import render

from .models import Paper

def index(request):
    paper_list = Paper.objects.all()
    context = {'paper_list': paper_list}
    return render(request, 'papers/index.html', context)

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

nav.html

<nav class="menu" id="theMenu">
<div class="menu-wrap" data-spy="scroll">
    <h1 class="logo"><a href="{% url 'papers:index' %}">MY LIBRARY</a></h1>
        <i class="icon-remove menu-close"></i>
            {% for slug in paper.slug %}
                <a href="{% url 'detail' slug=paper.slug %}">{{ paper.title }}</a>
            {% endfor %}
</div>
<div id="menuToggle"><i class="icon-reorder"></i></div>

的index.html

{% block h1 %}
<div class="box first">
    <div class="row">
        <div class="container">
             {% for paper in paper_list %}
                <div class="col-xs-12 col-sm-4 col-md-3">
                    <div class="center">
                        <a href="{{ paper.slug }}"  i class="icon-credit-card icon-md icon-color1"></a></li>
                        <h4>{{ paper.title }}
                        <p>{{ paper.description }}
                    </div>
                </div>
            {% endfor %}
        </div>
    </div>
</div>

{% endblock %}

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 %}

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>
</html> 

models.py

from django.db import models
from django.template.defaultfilters import slugify
from ckeditor.fields import RichTextField

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


    def __str__(self):
        return self.title

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

        super(test, self).save()

1 个答案:

答案 0 :(得分:1)

问题在于您的nav.html

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

在那一行中你正在循环一个字符串,你应该把它放在那里:

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