【问题标题】:set a variable in django template file, and update it after iteration在 django 模板文件中设置一个变量,并在迭代后更新它
【发布时间】:2019-01-13 14:59:44
【问题描述】:

尝试在django模板中设置变量,并在迭代后制定一个简单的规则来更新它。这是我的模板:

{% for adv in advs %}
<div class="media-item big" style="top: 18%;left:{% cycle '304' '1078' %}px;">
    <div class="media-item__tags">
         <a href="#" class="tag">{{ adv.year }}</a>
         <a href="#" class="tag">{{ adv.payer}}</a>
    </div>
    <div class="media-item__content">
        <div class="media-item__background">
            <a href="project-spar.html" class="media-item-background__link"></a>
            <div class="media-item__canvas">
                <div class="media-item__canvas-background" style="background-image: url({{adv.image.url}})"></div>
            </div>
            <h2 class="topic white upcase fixed-size">{{ adv.name }}</h2>
            <a href="#" class="link regular width600-only">Смотреть проект</a>
        </div>
    </div>
</div>

在第一个 div 中,我需要设置不同的 'left:' 值。我想制定规则:每次迭代后,值从 base=304 变为 base+774 px。我尝试使用 {% cycle %} 以某种方式做到这一点,但它对我不起作用,还尝试使用 {% with %} 标签设置变量,但没有找到有关如何更新它们的任何信息。

【问题讨论】:

  • 你现在得到的style的价值是多少?
  • 第一-左:304,第二:1078,第三应该是1078+774。我不能用 {% cycle %} 因为可能是很多对象
  • 这是你现在得到的还是你想要的?
  • 现在我有第一次迭代:304,第二次:1078,第三次:304,第四次:1078。我需要第一次:304,第二次 1078,第三次:1852,第四次:2626 等等。我做不到所有与 %cycle% 原因我可能会有 500 多个对象,所以我想设置变量,它将在每次迭代后更新。问题是如何做到这一点

标签: django python-3.x templates


【解决方案1】:

您可以通过将0...n 中的当前计数器乘以 774 并加上基值 304 来设置 style。为此,您需要一个自定义模板标签。

在您的应用中创建一个templatetags 目录。添加一个空的__init__.pymultiply_add.py

multiply_add.py

from django import template
register = template.Library()

@register.simple_tag
def mul_add(a, b, base_value):
    return (a * b) + base_value

template.html

{% load multiply_add %}

{% for adv in advs %}
<div class="media-item big" style="top: 18%;left:{% multiply_add forloop.counter0 774 304 %}px;">
    <div class="media-item__tags">
         <a href="#" class="tag">{{ adv.year }}</a>
         <a href="#" class="tag">{{ adv.payer}}</a>
    </div>
    <div class="media-item__content">
        <div class="media-item__background">
            <a href="project-spar.html" class="media-item-background__link"></a>
            <div class="media-item__canvas">
                <div class="media-item__canvas-background" style="background-image: url({{adv.image.url}})"></div>
            </div>
            <h2 class="topic white upcase fixed-size">{{ adv.name }}</h2>
            <a href="#" class="link regular width600-only">Смотреть проект</a>
        </div>
    </div>
</div>

【讨论】:

  • 完成。唯一的一点:在模板中应该是 {% mul_add forloop.counter0 774 304 %}。然后它工作;)
猜你喜欢
  • 2023-01-11
  • 2021-09-12
  • 1970-01-01
  • 2020-06-02
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多