使用 -tag 在 Django 模板中反向计数<ol>



我想编写一个模板

  • 是分页的(并非同一页上的所有列表项目(
  • 编号为-tag,因为这是订购列表的最语义方法
  • 可以逆转或不推动
  • 这些数字链接到表示的模型(每个li -TAG都包含链接到模型的a -TAG。(,这意味着该列表不是始终以1。
  • 开头

我的模型:

class Mymodel(models.Model):
  number = positiveIntegerField() 
  title = models.CharField(max_length=100)
  [...]

number是唯一的,有序的,当您用数字订购模型时,没有差距;数字是1个基于1的


我拥有的内容:( reverse是布尔变量,它告诉列表是否必须逆转(

{% if reverse %}
<ol class="content" start="{{ article_list.0.number|add:article_list.count }}" reversed=true>
    {% for article in article_list reversed %}
        <li class="{% cycle '' '' '' '' 'seperate-bot border-gray' %}"><a href="{% url 'myapp:article' article.number %}">{{ article.title }}</a></li>
    {% endfor %}
{% else %}
<ol class="content" start="{{ article_list.0.number }}">
    {% for article in article_list %}
        <li class="{% cycle '' '' '' '' 'seperate-bot border-gray' %}"><a href="{% url 'manifest:article' article.number %}">{{ article.alt_title }}</a></li>
    {% endfor %}
{% endif %}
</ol>

不幸的是,错误计数向后模板部分错误:最后一个数字始终为1,不应该是。最后一个数字应为article_list.0.number article_list.count(或:article_list|length(-1;或last_list_item.number,这会更好。

这是指:(为此示例pagined_by = 3(" |"因为所以改变了我的计数应该如何:(反向= true(

第1页

| 3。lorem ipsum

| 2。lorem ipsum

| 1。lorem ipsum

第2页

| 5。lorem ipsum

| 4。lorem ipsum

我得到的 :(只有第2页不好(

第2页

| 2。lorem ipsum

| 1。lorem ipsum


有没有好的方法来避免这种效果?(它来自哪里?(在最佳情况下应该仅在模板中工作。

我不确定为什么您会得到结果,但这似乎是一种非常复杂的方法来做一些事情。

您可以使用内置的last过滤器和with模板标签访问列表中的最后一项。

{% with article_list|last as last_article %}
<ol class="content" start="{{ last_article.number }}" reversed=true>
{% endwith %}

但是,我建议您在视图函数中而不是在模板中进行订购和逆转。Django的模板语言是根据不适合非琐碎逻辑的选择。

至于编号,您实际上可以将值属性分配给有序列表元素。这将解决您的问题。

<li value={{ article.number }} ...

示例:

<ol>
  <li value=3>it doesn't
  <li>have to
  <li>make
  <li value=42>sense
</ol>

最新更新