我有一个网站,其中列出了不同的项目/程序,该列表是动态的,因此一旦用户点击特定程序,例如/ program / health模板应该加载一个具有“健康”特定标题(桅杆头)的模板。如何根据所选程序加载基本模板?
答案 0 :(得分:0)
您是否考虑过使用模板变量中的CSS类名组合并包含模板标记来实现此目的?
类似的东西:
<body class="{{ program }}">
<div>{% include program_specific_template %}</div>
<div>Common stuff...</div>
</body>
答案 1 :(得分:0)
每当您将模板的路径传递给函数时,您可以将硬编码的字符串替换为您选择的某个变量。如果你这样做,那么确保它是一个明智的价值是极端重要。公平地说,模板系统将逃避危险的东西并且不会超出指定的模板目录,但是尝试加载不存在的模板会导致视图崩溃而你不希望这样。
如果您有该程序的模型,那么获取模型并使用slug作为模板名称,如下所示:
p = get_object_or_404(Program, slug = slug_from_url_or_whatever)
template = "program_%s.html" % p.slug
也可以将模板列表传递给加载器。如果找不到第一个,它将尝试下一个,等等。例如:
render_to_response([template, "default_program_template.html"], ...)
答案 2 :(得分:0)
您当然可以使用custom Context Processor和一些CSS来完成工作。
<强> settings.py 强>:
TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"yourproject.context_processors.header_context")
<强> context_processors.py 强>:
def header_context(request):
values = {'body_class': "default",}
if request.path == "/program/health/":
## Don't really use an if block, it's just nasty.
values['body_class'] = "health"
return values
<强> views.py 强>:
from django.shortcuts import render_to_response
from django.template import RequestContext
def view(request):
## Do magic stuff!
return render_to_response("template.html",
{},
context_instance=RequestContext(request))
<强> template.html 强>:
<body class="{{ body_class }}">
<!-- Whatever -->
</body>