Django模板:使模板的部分可重新排序?

时间:2011-07-04 19:33:01

标签: django django-templates

如何动态地以编程方式更改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 个答案:

答案 0 :(得分:2)

我建议在视图中创建一个与用户指定的顺序对应的部分名称列表。

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 :(得分:1)

对视图中的部分重新排序会更容易:

观点:

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%}
相关问题