загрузить базовый шаблон, переданный по параметру - PullRequest
0 голосов
/ 21 апреля 2010

У меня есть сайт, на котором перечислены разные проекты / программы, список динамический, поэтому, когда пользователь нажимает на конкретную программу, например, / program / health шаблон должен загружать шаблон с заголовком "health" (заголовок мачты). Как я могу загрузить базовый шаблон на основе выбранной программы?

Ответы [ 3 ]

0 голосов
/ 21 апреля 2010

Всякий раз, когда вы передаете путь к шаблону функции, вы можете заменить жестко запрограммированную строку некоторой переменной по вашему выбору. Если вы сделаете это, крайне важно , чтобы убедиться, что это разумное значение. Справедливости ради, система шаблонов избежит опасных вещей и не выйдет за пределы указанного каталога шаблонов, но попытка загрузить несуществующий шаблон приведет к сбою представления, а вам этого не нужно.

Если у вас есть модель для программы, тогда получите модель и используйте слаг в качестве имени шаблона, например:

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"], ...)
0 голосов
/ 22 апреля 2010

Вы можете использовать пользовательский контекстный процессор и немного 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>
0 голосов
/ 21 апреля 2010

Рассматривали ли вы использование комбинации имен классов CSS из переменной шаблона и включение тегов шаблона для достижения этой цели?

Что-то вроде:

<body class="{{ program }}">
    <div>{% include program_specific_template %}</div>
    <div>Common stuff...</div>
</body>
...