Django明文模板

时间:2011-10-10 09:08:17

标签: django templates plaintext templatetag

我目前正在编写一个模板,主要输出我的字段,并将其内容从数据库中作为明文输出,以便可以下载(应该是ltsp的配置文件)并且我处于绑定状态。

我经常做这样的事情:

{% for model in modelqueryset %}
...
{% ifnotequal model.fieldx "" %}
    fieldx = {{ model.fieldx }}
{% endifnotequal %}
...
{% endfor %}

“...”是一个很长的列表/很多条目:

{% ifnotequal model.fieldy "" %}
    fieldy = {{ model.fieldy }}
{% endifnotequal %}

现在,如果fieldx实际上是空的,那么它会显示一个空行,但这会占用不必要的空间,并且会使明文难以阅读。 现在回答问题:

如何删除这些空行?我试过{%spaceless%} ... {%endspaceless%}并没有真正帮助。我是否必须编写自定义模板标签,或者我做错了什么或忽略了什么?

感谢任何帮助,我也会说谢谢

3 个答案:

答案 0 :(得分:0)

由于换行符,您有一个空行。

... <- here
{% ifnotequal model.fieldx "" %}
    fieldx = {{ model.fieldx }}
{% endifnotequal %}

所以你可以像这样重写它

...{% ifnotequal model.fieldx "" %}
       fieldx = {{ model.fieldx }}
   {% endifnotequal %}

或尝试StripWhitespaceMiddleware

答案 1 :(得分:0)

您不必为所有内容使用模板 - 使用普通的HttpResponse构造函数并在Python中构建输出文本可能更容易:

>>> response = HttpResponse()
>>> response.write("<p>Here's the text of the Web page.</p>")
>>> response.write("<p>Here's another paragraph.</p>")

答案 2 :(得分:0)

正如@DrTyrsa所说,你可以使用StripWhitespaceMiddleware。或者,如果您只是偶尔想要删除空白,可以将此中间件的核心拉出到这样的实用程序类中:

import re
from django.template import loader, Context

class StripWhitespace():
    """
    Renders then strips whitespace from a file
    """

    def __init__(self):
        self.left_whitespace = re.compile('^\s+', re.MULTILINE)
        self.right_whitespace = re.compile('\s+$', re.MULTILINE)
        self.blank_line = re.compile('\n+', re.MULTILINE)


    def render_clean(self, text_file, context_dict):
        context = Context(context_dict)
        text_template = loader.get_template(text_file)
        text_content = text_template.render(context)
        text_content = self.left_whitespace.sub('', text_content)
        text_content = self.right_whitespace.sub('\n', text_content)
        text_content = self.blank_line.sub('\n', text_content)
        return text_content

然后你就可以在你的views.py中使用它了:

def text_view(request):
    context = {}
    strip_whitespace = StripWhitespace()
    text_content = strip_whitespace.render_clean('sample.txt', context)
    return HttpResponse(text_content)

请注意,我添加了blank_line正则表达式,因此您可以删除所有空白行。如果您仍希望在部分之间看到一个空行,则可以删除此正则表达式。