Django模板 - 格式化字符串

时间:2014-09-02 11:31:56

标签: django django-templates

我有这些变数:

#Int
user.id

#Float (e.g. X.YYYY)
profile.rating

我需要这样格式化(`是分隔符):

<a href="/user/`user.id`/">`profile.rating`</a>

我尝试了很多方法来格式化它们,但都没有效果。例如,连接它们:"<a href=\"/user/"|add:user.id|add:"\">"|add:profile.rating|add:"</a>"没有给我任何东西(字面意思,没有)。

我怀疑这是因为add:是数字优先,但是使用slugifystringformat:""将数字转换为字符串再次给了我 nothing

我该怎么做?

请注意:我需要使用过滤器执行此操作,因为结果将作为参数传递给include。

更新 基本上,我建立了一种模块化的包括。它包括如下所示:

<section>
...

  {% if custom_section %}
  <section id="{{ custom_section_id }}">
    {{ custom_section }}
  </section>
  {% endif %}

...
</section>

这意味着我不能直接在参数中包含值,我需要在嵌套section内部的标记。

2 个答案:

答案 0 :(得分:1)

我设法通过这个标记来解决这个问题:

{% with "<a href="\"/user/" as link_start %}
  {% with profile.rating|stringformat:".1f" as rating %}
    {% with user.id|slugify as id %}
      {% with link_start|add:id|add:"/\">" as link %}
        {% with link|add:rating|add:"/5</a>" as data %}
          {% include "XX" with custom_data:data|safe %}

 {% endwith %} a couple of times

此处的关键是|stringformat:".1f"user.id|slugify,因为没有它们,djangos worthless模板语言默认信念所有值都是数字,因此废话就出来了。

值得注意的是|safe,因为没有它,语言会逃避值。

答案 1 :(得分:0)

  

请注意:我需要使用过滤器执行此操作,因为结果将是   作为参数传递给include。

您可以直接传递它们以包含,因为它将正确地使用上下文。

{% include user.id %}