Kann man den Wert eines Feldes in einem Djangotemplate durch Zuweisung befüllen?

Django, Flask, Bottle, WSGI, CGI…
Antworten
AFX
User
Beiträge: 51
Registriert: Samstag 4. September 2021, 08:40

Ich habe ein Template für eine UserImageForm. Dieses Template sieht wie folgt aus:

Code: Alles auswählen

{% extends 'base.html' %}  
  
{% block content %}
{% if user.is_authenticated %}
    <form method="post" enctype="multipart/form-data">  
        {% csrf_token %}
   {% for field in form %}
    <div class="fieldWrapper">
    {{ field.errors }}

   {% if field.html_name == "caption" %}
        {% with {{ field.value }} = {{ user.username }} %}
        {% endwith %} 
   {% endif %}

    {{ field }}

   </div>
   {% endfor %}

        <button type="submit">Upload</button>
    </form>  
  
     {% if img_obj %}
        <h3>Erfolgreich hochgeladen.</h3>
      {% endif %}

  {% endif %}
{% endblock content %}  
Mein Ziel ist es nun, den „usernamen“ in das Textfeld des Templates zu setzen, siehe Zeile 12 im Templatecode.

So klappt es nicht, denn es kommt der Fehler:
'with' expected at least one variable assignment
Meine Frage – ist es möglich, im Template eine derartige Zuweisung zu bewerkstelligen, und falls ja, dann wie?
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@AFX: Ich weiss nicht so genau was Du machen willst, aber was auf jeden Fall schon mal falsch ist, sind die ``{{…}}`` innerhalb von dem ``{% with … %}``, denn innerhalb von ``{% %}`` bist Du ja nicht mehr in dem Teil des Templates wo man ``{{ … }}`` (oder auch ``{% … %}``) verwenden kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
AFX
User
Beiträge: 51
Registriert: Samstag 4. September 2021, 08:40

Ich habe es nun so gelöst - ich lade das Bild hoch, ich habe die url sowie das caption-Feld wie folgt befüllt.

Code: Alles auswählen

    
    {% extends 'base.html' %}  
      
    {% block content %}
    {% if user.is_authenticated %}
        <form method="post" enctype="multipart/form-data">  
            {% csrf_token %}
       {% for field in form %}
        <div class="fieldWrapper">
        {{ field.errors }}

        {{ field }}

       </div>
       {% endfor %}

           <script>
                $("#id_caption").css("visibility", "hidden")
                $("#id_caption").val('{{ user.username }}')
           </script>

            <button type="submit">Upload</button>
        </form>  
      
         {% if img_obj %}
            <h3>Erfolgreich hochgeladen.</h3>
          {% endif %}

      {% endif %}
    {% endblock content %}  
    
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@AFX: Warum passiert das überhaupt im Template und nicht im Code wo `form` erstellt wird?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
AFX
User
Beiträge: 51
Registriert: Samstag 4. September 2021, 08:40

Ich weiß nicht, wie ich im Code auf den aktuell angemeldeten user zugreifen kann, daher habe ich das so in der Form gebastelt.
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sollte das nicht eine Standardfunktion von Django sein? Wenn man das sucht, findet man zB https://stackoverflow.com/questions/126 ... -in-django
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

AFX hat geschrieben: Freitag 10. Juni 2022, 13:50 Ich weiß nicht, wie ich im Code auf den aktuell angemeldeten user zugreifen kann, daher habe ich das so in der Form gebastelt.
Du übergibst doch in deiner views.py in jeder Funktion ein request-Objekt. Das macht man nicht ohne Grund.

Da hängt der User dran. Also mit request.user hast du den.

Code: Alles auswählen

def whatever(request):
    user = request.user
    
    wert = 'hallo'
    (...)
    return render(request, "deine_app/dein_html.html",
        {"parameter": wert}) 
Könntest beispielsweise auch dann im template mit der Variable "parameter" dir den zugewiesenen wert = 'hallo' ausgeben lassen. (Hat nichts mit deinem Problem zu tun, aber vielleicht wusstest du das noch nicht)
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Antworten