Python 更改为其他模板时,链接将消失

Python 更改为其他模板时,链接将消失,python,django,templates,Python,Django,Templates,我正在尝试用Django创建一个博客网站。我基本上是个初学者,所以这个问题可能很傻,但我不知道如何解决这个问题 我的标题中有一个主导航。在base.html模板中,我在菜单中创建了几个页面的链接。在同一个模板中,我在侧边栏中有一个类别列表,它是列出该类别中所有帖子的链接 当我转到任何其他模板时(当我单击这些链接时),即使我扩展了base.html模板,链接也会消失。无论模板如何,我如何将它们保持在原位?对于这样的事情,通常的做法是什么 谢谢你的阅读! 干杯 编辑:代码: <nav>

我正在尝试用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>
解决方案: 谢谢大家的帮助。以下是我使用的解决方案:

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])