Джанго открытый текстовый шаблон - PullRequest
1 голос
/ 10 октября 2011

В настоящее время я пишу шаблон, который в основном выводит мои поля и их содержимое из базы данных в виде открытого текста, чтобы его можно было загрузить (предполагается, что это файл конфигурации для ltsp), и я в затруднении.

Я часто делаю такие вещи:

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

«...» - это длинный список / много записей:

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

Теперь, если поле fieldx фактически пусто, оно отображает пустую строку, которая, однако, просто занимает ненужное место и затруднит чтение открытого текста. Теперь к вопросу:

Как я могу удалить эти пустые строки? Я попытался {% spaceless%} ... {% endpaceless%}, и это не очень помогает. Должен ли я написать собственный тег шаблона или я что-то сделал неправильно или что-то упустил?

Любая помощь приветствуется, и я также уже скажу Спасибо

Ответы [ 3 ]

0 голосов
/ 10 октября 2011

Вам не нужно использовать шаблон для всего - может быть проще использовать простой конструктор HttpResponse и построить текст для вывода на Python:

>>> response = HttpResponse()
>>> response.write("<p>Here's the text of the Web page.</p>")
>>> response.write("<p>Here's another paragraph.</p>")
0 голосов
/ 01 февраля 2012

Как сказал @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, чтобы вы могли удалить ВСЕ пустые строки. Если вы все еще хотите видеть одну пустую строку между разделами, вы можете удалить это регулярное выражение.

0 голосов
/ 10 октября 2011

У вас есть пустая строка из-за переноса строки.

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

Так что вы можете переписать ее следующим образом

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

Или попробовать StripWhitespaceMiddleware

...