如何动态地以编程方式更改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个部分的列表可以按任何顺序出现。
注意:更新后显示模板的每个部分都有很多子部分,实际上很长。
答案 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%}