Django模板扩展:我如何最好地构建一个也可以修改的basenavbar?

时间:2015-10-02 12:11:00

标签: django

好的,这就是我目前正在做的事情:

我正在构建一个basetemplate,它定义了一个标题,maindiv,navbar和一个页脚。 在扩展该模板的所有模板中,您必须定义的是主要内容中的实际内容。这非常有效,因为包含的所有导航栏都是指向模型列表视图和模型创建视图的链接。

现在,当我进入模型列表视图时,我希望能够按状态对列表进行排序,并且我希望将该功能添加到导航栏。我想知道如何做到最好,因为唯一需要这种新行为的模板是列表视图。其他模板应保持不变。

我可以将另一个{%block filter_thingie%} {%endblock%}添加到我现在的导航栏中,只在列表视图中填写吗?

我仍然不确定构建模板的最佳方法。在“最糟糕”的情况下,我总是只为列表视图制作第二个导航栏,但我有点想避免这种情况。

(部分)basetemplate:

{% block content %}
  <div class="container-fluid">
    <div class="row">
      <div class="col-sm-3 col-md-2 sidebar">
        <ul class="nav nav-sidebar">

          <li><a href="/list-view" class="active">All objects of model</a></li>
          <li><a href="/create-view">Create new object of model</a></li>

        </ul>
      </div>
      <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
        {% block order_content %}{% endblock %}
      </div>
    </div>
  </div>
{% endblock content %}

是的,所以我可能只是想在这里复杂化,但我绝对希望保持结构良好,如果我不需要,不要重复自己。

我感谢所有的意见,感谢阅读。 :)

1 个答案:

答案 0 :(得分:1)

如果您将整个导航栏部分拉出到自己的块中,则只能在您需要的模板中覆盖它。

<!-- base.html -->
{% block navbar %}
<div class="col-sm-3 col-md-2 sidebar">
  <ul class="nav nav-sidebar">

    <li><a href="/list-view" class="active">All objects of model</a></li>
    <li><a href="/create-view">Create new object of model</a></li>

  </ul>
</div>
{% endblock %}

<!-- list.html -->
{% block navbar %}
<div class="col-sm-3 col-md-2 sidebar">
  <ul class="nav nav-sidebar">

    <li><a href="/list-view" class="active">All objects of model</a></li>
    <li><a href="/create-view">Create new object of model</a></li>
    <li>My filter thingie</li>
  </ul>
</div>
{% endblock %}

另一方面,如果您对最后的项目感到满意,那么最好 - 正如您所说的那样 - 只需在网站的最后一个位置后在基本模板中放置一个空块全范围的导航项目,并覆盖它。 (虽然我可能会使这个名称比filter_thingie更通用,但是当其他东西需要进入那个插槽时,预计会出现不可避免的情况......)