使用django过滤器缩进模板

时间:2014-12-03 02:09:36

标签: django django-templates django-filter

我无法从模板中缩进文字。我在mainTemplate.html中使用多个&nbsp缩进文本的开头,但是,如果文本继续到新行,则新行不缩进。所以,我一直在尝试使用过滤器来正确缩进每一行。我的模板使用{% include %}标记来呈现并包含我尝试缩进的文本的子模板(display_citations.html)。是否可以将渲染的子模板存储为字符串,以便我可以将其传递给我的“缩进”过滤器?如果没有,是否有另一种方法来缩进该子模板的内容?

mainTemplate.html

{% for publication in value %}
            {% include "software/display_citations.html" with publication=publication url="/select_citations/"%}
{% endfor %}

display_citations.html

{{ publication.authors }}. {{ publication.title }}{% if not publication.title_ends_with_punct %}.{% endif %}{% if publication.journal %} {{ publication.journal }}.{% endif %}{% if publication.month %} {{ publication.month_long }}{% endif %} {{ publication.year }}.{% if publication.volume %}{% if publication.number %} {{ publication.volume }}({{ publication.number }}){% else %} {{publication.volume}}{% endif %}{% endif %}{% if publication.pages %}: {{ publication.pages }}.{% else %}.{% endif %}
<br><a href="{{url}}{{ publication.pk }}/?ris" target="_blank" download="Citations.ris">RIS</a>

views.py

register = template.Library()

@register.filter(name='indent')
@stringfilter
def indent(value, arg=1):
    import re
    regex = re.compile("^", re.M)
    return re.sub(regex, "\t"*int(arg), value)

我认为我需要在mainTemplate.html中做的是以某种方式从我的子模板中创建一个字符串,然后将其传递给我的过滤器......?也许是这样的事情:

text_to_be_indented = {% include "software/display_citations.html" with publication=publication url="/select_citations/"%}
{{ text_to_be_indented | indent:"4" }}

1 个答案:

答案 0 :(得分:0)

您确定必须使用这么多&nbsp;吗?为什么不尝试使用样式div的{​​{1}}?