我目前正在编写一个模板,主要输出我的字段,并将其内容从数据库中作为明文输出,以便可以下载(应该是ltsp的配置文件)并且我处于绑定状态。
我经常做这样的事情:
{% for model in modelqueryset %}
...
{% ifnotequal model.fieldx "" %}
fieldx = {{ model.fieldx }}
{% endifnotequal %}
...
{% endfor %}
“...”是一个很长的列表/很多条目:
{% ifnotequal model.fieldy "" %}
fieldy = {{ model.fieldy }}
{% endifnotequal %}
现在,如果fieldx实际上是空的,那么它会显示一个空行,但这会占用不必要的空间,并且会使明文难以阅读。 现在回答问题:
如何删除这些空行?我试过{%spaceless%} ... {%endspaceless%}并没有真正帮助。我是否必须编写自定义模板标签,或者我做错了什么或忽略了什么?
感谢任何帮助,我也会说谢谢
答案 0 :(得分:0)
由于换行符,您有一个空行。
... <- here
{% ifnotequal model.fieldx "" %}
fieldx = {{ model.fieldx }}
{% endifnotequal %}
所以你可以像这样重写它
...{% ifnotequal model.fieldx "" %}
fieldx = {{ model.fieldx }}
{% endifnotequal %}
答案 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
正则表达式,因此您可以删除所有空白行。如果您仍希望在部分之间看到一个空行,则可以删除此正则表达式。