Seite 1 von 1

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

Verfasst: Donnerstag 9. Juni 2022, 10:26
von AFX
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?

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

Verfasst: Donnerstag 9. Juni 2022, 10:41
von __blackjack__
@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.

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

Verfasst: Donnerstag 9. Juni 2022, 13:41
von AFX
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 %}  
    

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

Verfasst: Donnerstag 9. Juni 2022, 15:03
von __blackjack__
@AFX: Warum passiert das überhaupt im Template und nicht im Code wo `form` erstellt wird?

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

Verfasst: Freitag 10. Juni 2022, 13:50
von AFX
Ich weiß nicht, wie ich im Code auf den aktuell angemeldeten user zugreifen kann, daher habe ich das so in der Form gebastelt.

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

Verfasst: Freitag 10. Juni 2022, 15:22
von __deets__
Sollte das nicht eine Standardfunktion von Django sein? Wenn man das sucht, findet man zB https://stackoverflow.com/questions/126 ... -in-django

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

Verfasst: Freitag 10. Juni 2022, 15:37
von naheliegend
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)