Шаблон Django: сделать разделы шаблона переставляемыми? - PullRequest
3 голосов
/ 04 июля 2011

Как программно изменить разделы шаблона Django на лету?

Данный шаблон:

{% for it in itemlist_1 %}
{{it.unique_display_function_1}}
{%endfor%}

{% for it in itemlist_2 %}
{{it.unique_display_function_2}}
{{it.unique_display_function_2a}}
{{it.unique_display_function_2b}}
{%endfor%}

...

{% for it in itemlist_n %}
{{it.unique_display_function_n}}
{{it.unique_display_function_n_sub_x}}
{{it.unique_display_function_n_sub_xyz}}
{%endfor%}


Как можно создать общий шаблон Django, чтобы каждый раз при визуализации этого шаблона внешние настройки определяли порядок отображения списков элементов в шаблоне?

Таким образом, список из n разделов может появляться в любом порядке в соответствии с некоторыми внешними настройками.

ПРИМЕЧАНИЕ: обновлено, чтобы показать, что каждый раздел шаблона имеет много подразделов и на самом деле довольно длинный.

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Я бы предложил создать список имен разделов в представлении, соответствующем порядку, указанному пользователем.

def view(request):
    # this list can also be built dynamically based on user preferences
    item_list = ["section_one.html", "section_two.html", "section_three.html"]
    return render_to_response('main_template.html', RequestContext(request, locals()))

Затем в шаблоне вы можете отобразить каждый раздел как подшаблон, как показано ниже, где подшаблоны называются в формате «NAME.html»:

{%for item in item_list%}
    {% include item %}

Вот ссылка на тег включения: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#include

1 голос
/ 04 июля 2011

Было бы проще изменить порядок разделов в представлении:

Вид:

def view(request):
    context = {}
    context['items'] = []

    #decide the order and put the items into the context

    return render_to_response('template.html',context,context_instance=RequestContext(request))

Шаблон:

{%for itemlist in items%}
    {%for item in itemlist%}
        {{item.display_function}}
    {%endfor%}
{%endfor%}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...