2011-07-04 83 views
3

如何以編程方式更改Django模板的部分?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

難道你不能簡單地把你的itemlists放在一個列表中,這是按視圖排序嗎? –

回答

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

它會更容易重新排列視圖中的部分:

的觀點:

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%}