Python 更改为其他模板时,链接将消失
我正在尝试用Django创建一个博客网站。我基本上是个初学者,所以这个问题可能很傻,但我不知道如何解决这个问题 我的标题中有一个主导航。在base.html模板中,我在菜单中创建了几个页面的链接。在同一个模板中,我在侧边栏中有一个类别列表,它是列出该类别中所有帖子的链接 当我转到任何其他模板时(当我单击这些链接时),即使我扩展了base.html模板,链接也会消失。无论模板如何,我如何将它们保持在原位?对于这样的事情,通常的做法是什么 谢谢你的阅读! 干杯 编辑:代码:Python 更改为其他模板时,链接将消失,python,django,templates,Python,Django,Templates,我正在尝试用Django创建一个博客网站。我基本上是个初学者,所以这个问题可能很傻,但我不知道如何解决这个问题 我的标题中有一个主导航。在base.html模板中,我在菜单中创建了几个页面的链接。在同一个模板中,我在侧边栏中有一个类别列表,它是列出该类别中所有帖子的链接 当我转到任何其他模板时(当我单击这些链接时),即使我扩展了base.html模板,链接也会消失。无论模板如何,我如何将它们保持在原位?对于这样的事情,通常的做法是什么 谢谢你的阅读! 干杯 编辑:代码: <nav>
<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>
解决方案:
谢谢大家的帮助。以下是我使用的解决方案:
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])
在django中,每个“页面”都是一个视图。你的index()
函数是你主页的视图,我打赌你有一个blog\u post()
或类似的东西来呈现文章
每个视图都必须定义要使用的模板,并传递呈现其模板所需的上下文(变量)。基本模板有一个需要链接
变量的菜单,因此呈现扩展基本模板的模板的每个视图必须将链接
变量传递给上下文
简单地说:)您需要将links
变量传递到帖子视图中的上下文
小建议:不要将函数用作视图。最好用
希望这有帮助您的模板被传递到当前视图的上下文中,因此您不能指望
index()
视图的上下文在任何地方都能神奇地使用
在其他模板中提供此类数据的两种常见解决方案是
就我而言,我发现自定义标记比上下文处理器更易于维护,并且使用
inclusion\u tag()
快捷方式,它们与上下文处理器一样易于设置 你可以发布你的模板吗?您是否在其他模板中包含了{%extends'myapp/base.html%}
?我已经发布了链接代码。所有其他模板都扩展了base.html模板。如何将链接
传递到上下文?我已经在帖子中添加了代码。如果您阅读了有关上下文处理器的文档,您会发现您不必向视图添加任何内容(除了确保它们使用请求上下文
)-只需将自定义上下文处理器添加到设置中即可。上下文处理器
@plessdontbelong:就我而言,基于类的视图是我99.99%用例的主要PITA。我不认为添加无用的意外复杂性比KISS“更好”。你需要将links变量传递到你文章视图中的上下文:所以你建议OP在每个视图中复制这段代码?顺便说一句,你想在第三方应用程序视图中添加哪些内容?@brunodesshuilliers no-waaay。我每天使用CBV,我考虑使用真正的PITA功能。即使在这种情况下,他也可以创建一个MIXIN,在上下文中自动添加<代码>链接,用于实现MIXIN的所有视图(但这不是争论的地方:P)“我每天使用CBV,我考虑使用函数“真正的PITA”=>这正是我的观点:这是一个主观的观点,不是一个技术事实,也不是一个广泛认可的最佳实践。WRT/向每个视图添加一个MIXIN,这不是我所认为的一个干净的、解耦的、可维护的解决方案。首先,它强制您使用CBV,然后您必须将该混合传播到每个视图,包括第三方应用程序视图,以实现与这些视图负责的功能完全正交的功能。上下文处理器和模板标记的作用是使“站点全局”的内容对所有模板都全局可用,而不会使视图中出现完全无关的问题。
context_instance = RequestContext(request, processors=[base_links])