如何在一个模板中渲染另一个模板?

2 投票
1 回答
2553 浏览
提问于 2025-04-16 03:16

我刚开始学习Django和Python,现在遇到麻烦了!虽然有点复杂,但我会尽量解释清楚……我有一个叫做 index.html 的模板,其中有一个包含标签:

{% include 'menu.inc.html' %}

这个菜单是动态的(可以参考这个链接:http://code.google.com/p/django-treemenus/)。菜单应用程序有一个视图,用来渲染 menu.inc.html

from django.http import HttpResponse
from django.template import Context, loader
from treemenus.models import Menu

def mymenu(request):
    mainmenu = Menu.objects.get(id = 1)
    template = loader.get_template('menu.inc.html')
    context = Context({
        'mainmenu':mainmenu,
    })

    return HttpResponse(template.render(context))

所以当我访问 index.html 时,服务器会把它发给我,而Django会加载并提供 menu.inc.html!但是内容却没有加载!我想问的是:

  1. 我该如何把 menu.inc.html 反向链接到这个视图呢?或者
  2. 我该如何告诉Django某个模板需要通过特定视图来渲染另一个模板呢?

我不想在我的首页视图中写 mainmenu = Menu.objects.get(id = 1),因为菜单也会出现在其他页面……我在想用iframe加上 urls.py 中的规则,但这看起来是个很糟糕的解决办法……

我说的有道理吗?!

1 个回答

2

乍一看,这似乎是一个需要添加一个包含标签的情况。你可能想写一个自定义标签来显示树形菜单。然后在主视图中,你可以传递必要的上下文变量,让这个标签正常工作。

根据文档的说明:

另一种常见的模板标签类型是通过渲染另一个模板来显示一些数据。

撰写回答