2016-08-29 3 views
1

У меня есть требование, где я должен включать шаблон внутри тега шаблона. Но шаблон, который я хочу включить, не является фиксированным. У меня есть список шаблонов, и в зависимости от того, что было найдено, сначала необходимо включить.Django include template tag несколько вариантов шаблонов

Однако тег include включает только одно имя шаблона. Есть ли способ изменить это поведение или каким-либо другим способом достичь этого.

Я использую пользовательский тег шаблона для того же самого, но я получаю предупреждение, так как обновление Джанго 1,9, что

RemovedInDjango110Warning: render() must be called with a dict, not a RequestContext. 
return t.render(context) 

Это мой пользовательский шаблон тег

@register.simple_tag(takes_context=True) 
def custom_include(context, *template_choices): 
    template_choices = (context['optionalTemplate'],) + template_choices 
    t = template.loader.select_template(template_choices) 
    return t.render(context) 

Я пытался получать Dict от контекст, и он, казалось, работал (по крайней мере, я думал об этом). Но некоторые данные контекста пропали. Например, мои хиты Google Analytics попали в нуль и что-то вроде этого.

request = context['request'] 
mydict = context.dicts[0] 
return t.render(mydict, request) 

Может кто-нибудь предложить, как достичь этого.

+0

Пробовал ли вы изгнать из контекста? 'return t.render (dict (context))'. Я не уверен, работает ли это. Если RequestContext - это объект, вы можете проверить, содержит ли он файл dict с интересующими вас интересными вещами. Что-то вроде 'context.some_dict_name'. – allcaps

+0

Я тоже это пробовал, и мне показалось, что это работает (по крайней мере, я так думал). Но некоторые данные контекста пропали. Например, мои хиты Google Analytics попали в нуль и что-то вроде этого. См. Мое обновление к вопросу – Anurag

+0

Может быть, 't.render_to_string (context_instance = request_context)'? В примечаниях к выпуску Django 1.10 также упоминается: «Объекты шаблона Django, возвращаемые get_template() и select_template(), больше не принимают контекст в методе render(). ' https://docs.djangoproject.com/en/1.10/releases/1.10/ Я больше не смотрел соответствующий билет. Но причина этого должна быть в трекере. https://code.djangoproject.com/ – allcaps

ответ

1

Вам нужно сгладить контекст в один dict. Это позволит объединить данные из всех внутренних dicts:

mydict = context.flatten() 
return t.render(mydict, context.request) 

Также проверьте the docs.

+0

эй, спасибо, он работает. Мне просто нужно следить за аналитикой google за несколько часов, чтобы проверить это также – Anurag

+0

Я проверил его и его работу как ожидалось – Anurag