【发布时间】:2015-08-02 21:56:41
【问题描述】:
我正在尝试在 Django 中创建一个博客网站。我几乎是一个初学者,所以这个问题可能很愚蠢,但我不知道如何解决这个问题。
我的标题中有一个主导航。在 base.html 模板中,我在几个页面的菜单中创建了链接。在同一个模板中,我在侧边栏中有一个类别列表,这些类别是列出该类别中所有帖子的链接。
当我转到任何其他模板时(当我单击任何这些链接时),即使我扩展了 base.html 模板,链接也会消失。无论模板如何,我如何才能将它们保持在适当的位置?这种事情的常见做法是什么?
感谢阅读! 干杯!
编辑:代码:
<nav>
<ul>
<li><a href="{% url 'index' %}">HOME</a></li>
{% for link in links %}
<li><a href="{% url 'page' link.slug %}">{{ link.title }} </a></li>
{% endfor %}
</ul>
</nav>
这是在 base.html 中,但那些链接(除了硬编码的 Home 链接)在其他模板中消失了,这只是改变了内容块。
编辑 2: 这是基地的视图:
def index(request):
posts = Post.objects.all()
links = Page.objects.filter(menu='Y')
categories = Category.objects.all()
return render(request, 'main/base.html', {'posts': posts,
'links': links,
'categories': categories,
})
解决方案: 感谢大家的帮助。这是我使用的解决方案:
from django.template import RequestContext
def base_links(request):
header_links = Page.objects.filter(menu='Y')
sidebar_categories = Category.objects.all()
return {
'links': header_links,
'categories': sidebar_categories,
}
然后我添加了:
context_instance = RequestContext(request, processors=[base_links])
我的所有观点。
【问题讨论】:
-
能否请您发布您的模板?您是否在其他模板中包含了
{% extends 'myapp/base.html' %}? -
我已经发布了链接代码。所有其他模板都扩展了 base.html 模板。
-
links是如何传递给上下文的? -
我已经在帖子中添加了代码。
-
如果您阅读有关上下文处理器的文档,您会发现您不必在视图中添加任何内容(除了确保它们使用
RequestContext) - 只需将您的自定义上下文处理器添加到你的settings.CONTEXT_PROCESSORS。