it-swarm.com.de

jinja2 Wie entferne ich die nachgestellte Zeile?

Ich benutze jinja 2, um eine yaml-Datei auszugeben, kann aber nicht scheinen, eine nachgestellte Zeile und das Ende einer for-Schleife zu beseitigen. ZB das unten 

 - request:
        path: {{ path }}
        headers:
          Origin: 'somedomain.com'
          user-agent: 'agent'
          referer: 'some.domain.com'
          authority: 'somedomain.com'
        querystring:
          {% for key, value in querystring.items() -%}
          {{ key }}: '{{ value }}'
          {% endfor %}
      response:
        content:
          file: {{ content }}

gibt mir die Ausgabe:

- request:
    path: /some/path
    headers:
      Origin: 'somedomain.com'
      user-agent: 'agent'
      referer: 'somedomain.com'
      authority: 'somedomain.com'
    querystring:
      postcode: 'xxxxxx'
      houseNo: '55'

  response:
    content:
      file: address.json

Mit einer zusätzlichen unerwünschten Leerzeile nach HausNr. Wie entferne ich diese Linie?

25
Yunti

Ändern Sie Ihre Schleife, um Leerzeichen vom oberen UND unteren Ende der Ausgabe zu entfernen (beachten Sie das zusätzliche "-" beim for-Schleife-Schließen):

 {% for key, value in querystring.items() -%}
      {{ key }}: '{{ value }}'
 {%- endfor %}

In meinen Tests (mit https://github.com/abourguignon/jinja2-live-parser ) muss das "-" nach dem ersten {% stehen, nicht vor dem letzten, um das zu erreichen, wonach Sie fragen. 

Dokumente: http://jinja.pocoo.org/docs/dev/templates/#whitespace-control

30
tknickman

Ich denke, Sie können es mit der Whitespace-Control -Funktion loswerden. Daher würde ich den endfor-Block in {% endfor -%} ändern.

Mal sehen, ob das geht!

9
Scratch'N'Purr

Ich habe einen Weg gefunden, um dieses Problem zu lösen:

- request:
    path: {{ path }}
    headers:
      Origin: 'somedomain.com'
      user-agent: 'agent'
      referer: 'some.domain.com'
      authority: 'somedomain.com'
    querystring: >-
      {% for key, value in querystring.items() -%}
      {{ key }}: '{{ value }}'
      {% endfor %}
  response:
    content:
      file: {{ content }}
  • >, |: "clip": Legt den Zeilenvorschub fest und entfernt die nachfolgenden Leerzeilen.
  • >-, |=: "strip": Entfernen Sie den Zeilenvorschub, entfernen Sie die nachfolgenden Leerzeilen.
  • >+, |+: "keep": Behalten Sie den Zeilenvorschub bei und hinterlassen Sie leere Zeilen.

Thx Steve Bennett s Beitrag: Wie kann ich in YAML eine Zeichenkette über mehrere Zeilen brechen?

4
shuaiming

Für diejenigen, die Flask verwenden, die hier ankommen, haben diese Zeilen für mich den Trick gebracht:

app = Flask(__name__)
app.jinja_env.lstrip_blocks = True
app.jinja_env.trim_blocks = True
0
MarredCheese

Sie können das Rendern der folgenden Zeilen unterdrücken:

<% for ... %>
<% endfor %>
<% if ... %>
<% endif %>

setzen Sie trim_blocks = True und lstrip_blocks = True in Ihrer jinja2-Umgebung. Siehe das Beispiel unten, Informationen aus ihren Dokumenten

context = {'querystring': querystring, 'path': path, 'content': content}    
jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader('templates/'), trim_blocks=True, lstrip_blocks=True)
print(jinja_env.get_template('my_template.yaml').render(context))
0
spacether