【问题标题】:Django Template: Make sections of template reorderable?Django模板:使模板部分可重新排序?
【发布时间】:2011-09-28 08:36:54
【问题描述】:

如何以编程方式即时更改 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个部分的列表可以根据一些外部设置以任意顺序出现。

注意:更新显示模板的每个部分都有很多子部分,实际上很长。

【问题讨论】:

  • 你不能简单地将你的项目列表放在一个列表中,按视图排序吗?

标签: django django-templates


【解决方案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%}

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 2016-01-30
      • 2015-02-18
      • 1970-01-01
      相关资源
      最近更新 更多