1

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

我经常做这样的事情:

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

“...”是/是一长串/很多条目:

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

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

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

任何帮助表示赞赏,我也会说谢谢

4

3 回答 3

0

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

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

所以你可以像这样重写它

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

或者试试StripWhitespaceMiddleware

于 2011-10-10T09:19:12.413 回答
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>")
于 2011-10-10T11:54:58.327 回答
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正则表达式,因此您可以删除所有空行。如果您仍希望在部分之间看到一个空行,则可以删除此正则表达式。

于 2012-02-01T03:48:56.857 回答