【发布时间】:2014-12-11 08:44:37
【问题描述】:
我在 Django 项目中的 URL /about/ 和 /work/ 有一个页面。每个页面都有导航,需要用top_level_nav=True 显示所有页面。每个页面需要在每个页面上显示text。
我已成功获取导航中列出的所有页面,但/about/ 和/work/ 页面上的内容显示所有页面中的text。
/about/ 应该是:
# nav
-About
–Work
# text
<p>This is the about page.</p>
和 /work/ 应该是:
# nav
-About
–Work
# text
<p>This is the Work page.</p>
但是,/about/ 和 /work/ 页面都显示为:
#nav
–About
–Work
<p>This is the about page.</p>
<p>This is the Work page.</p>
基本上,所有的文本内容都会显示在所有页面上。
views.py
from django.shortcuts import render, get_object_or_404
from site_2015.models import Page
from site_2015.models import Home
def home(request):
home = get_object_or_404(Home)
# now return the rendered template
return render(request, 'site_2015/home.html', {'home': home})
def page(request, slug):
# get the Page object
pages = Page.objects.filter(top_level_nav=True).order_by('-pub_date')
page = get_object_or_404(Page, slug=slug)
# now return the rendered template
return render(request, 'site_2015/page.html', {'page': pages})
return render(request, 'site_2015/page.html', {'content': page})
models.py
from django.db import models
from django.core.urlresolvers import reverse
class Home(models.Model):
title = models.CharField(max_length=200)
text = models.TextField()
header_image = models.FileField(upload_to='page/%Y/%m/%d', null=True, blank=True)
def __unicode__(self):
return u'%s' % self.title
def get_absolute_url(self):
return reverse('site_2015.views.home')
class Page(models.Model):
title = models.CharField(max_length=200)
nav_text = models.CharField(max_length=30, null=True, blank=True)
slug = models.SlugField(unique=True, max_length=255, null=True, blank=True)
text = models.TextField()
header_image = models.FileField(upload_to='page/%Y/%m/%d', null=True, blank=True)
pub_date = models.DateTimeField(null=True, blank=True)
top_level_nav = models.BooleanField(default=False)
def __unicode__(self):
return u'%s' % self.title
def get_absolute_url(self):
return reverse('site_2015.views.page', args=[self.slug])
class HomeImg(models.Model):
home = models.ForeignKey('Home', related_name='images')
image = models.FileField(upload_to='page/%Y/%m/%d', null=True, blank=True)
class PageImg(models.Model):
page = models.ForeignKey('Page', related_name='images')
image = models.FileField(upload_to='page/%Y/%m/%d', null=True, blank=True)
page.html
<nav>
<ul>
<li><a href="/">Home</a></li>
{% for page in page %}
<li><a href="/{{ page.slug }}">{{ page.nav_text }}</a></li>
{% endfor %}
</ul>
</nav>
<div class="content">
{% for content in page %}
{{ content.text }}
{% endfor %}
</div>
我知道我不应该在 context.text 周围设置 for 块,但我不确定该怎么做。
【问题讨论】:
-
如果你在 manage.py shell 中运行
Page.objects.filter(top_level_nav=True).order_by('-pub_date'),你会得到两个文本字段吗?