Django模板的某些部分是有点小部件 1 ,它们已经实现using template tags并且页面上可能有很多部分它们(取决于例如,在会话cookie上)
如果他们的人数有限,这样的方法就会这样做:
{% extends "some.html" %}
{% load mywidgets %}
{% block widgets %}
{% if widget1 %} {% widget1 %} {% endif %}
{% if widget2 %} {% widget2 %} {% endif %}
...
{% if widgetn %} {% widgetn %} {% endif %}
{% endblock widgets %}
但如果不是呢?如何处理大量的小部件?
<小时/> 1 你可以在iGoogle;)
看到我的意思
答案 0 :(得分:1)
我认为这些小部件应该是某种对象,而不是模板标签。可以渲染它们的对象。然后,您可以简单地将这些对象存储在列表中并在一个循环中渲染它们。
在视图中,您将通过传递request
或其他必需参数来初始化这些对象。 Widget对象将实现将呈现它的__unicode__
方法。然后在模板中,您将呈现它:{{ widget }}
。
widgets.append( Widget(request) )
--
{% for widget in widgets %}
{{ widget }}
{% endfor %}
您的小部件甚至可能是django型号。然后,您可以存储设置并将其与用户关联。
您可能想查看fein-cms,django-cms如何实现内容占位符。任何类型的内容对象都可以与占位符相关联。内容对象可以自我呈现,占位符只是呈现它们的集合。