问题描述
我有一个应用程序,其中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楼
问题出在您的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 %}