如何在一个模板中渲染另一个模板?
我刚开始学习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
!但是内容却没有加载!我想问的是:
- 我该如何把
menu.inc.html
反向链接到这个视图呢?或者 - 我该如何告诉Django某个模板需要通过特定视图来渲染另一个模板呢?
我不想在我的首页视图中写 mainmenu = Menu.objects.get(id = 1)
,因为菜单也会出现在其他页面……我在想用iframe加上 urls.py
中的规则,但这看起来是个很糟糕的解决办法……
我说的有道理吗?!
1 个回答
2
乍一看,这似乎是一个需要添加一个包含标签的情况。你可能想写一个自定义标签来显示树形菜单。然后在主视图中,你可以传递必要的上下文变量,让这个标签正常工作。
根据文档的说明:
另一种常见的模板标签类型是通过渲染另一个模板来显示一些数据。