Seite 1 von 1

Django mehrere Views in einem Template zusammenfassen

Verfasst: Mittwoch 17. April 2024, 17:33
von Peter1977
Hallo,

Suche gerade nach der möglichkeit ein Template für mehrere Views zu machen leider hat die Suche noch nicht konkretes ergeben.

Code: Alles auswählen

from django.shortcuts import render
from .forms import BezeichnungForm
from .forms import EinheitForm
from .forms import ToolartForm
from .forms import SteuerungForm
from .forms import AnlagenartForm
from .forms import AufnahmeForm

from .models import Bezeichnung
from .models import Einheit
from .models import Toolart
from .models import Steuerung
from .models import Anlagenart
from .models import Aufnahme

# Create your views here.
def bezeichnung(request):
    if request.method == "POST":
        form = BezeichnungForm(request.POST)
    else:
        form = BezeichnungForm()

    if form.is_valid():
        bezeichnung=form.save(commit=False)
        bezeichnung.save()
        
    bezeichnungen=Bezeichnung.objects.all().order_by('bezeichnung')
    

    return render(request, 'daten/bezeichnung.html', {'form': form,'bezeichnungen':bezeichnungen})


def einheit(request):
    if request.method == "POST":
        form = EinheitForm(request.POST)
    else:
        form = EinheitForm()

    if form.is_valid():
        einheit=form.save(commit=False)
        einheit.save()
        
    einheiten=Einheit.objects.all().order_by('einheit')
    return render(request, 'daten/einheit.html', {'form': form,'einheiten':einheiten})


def toolart(request):
    if request.method == "POST":
        form = ToolartForm(request.POST)
    else:
        form = ToolartForm()

    if form.is_valid():
        toolart=form.save(commit=False)
        toolart.save()
        
    toolarten=Toolart.objects.all().order_by('toolart')
    kopf="Daten ToolArt"
    return render(request, 'daten/toolart.html', {'form': form,'toolarten':toolarten,'kopf':kopf})


def steuerung(request):
    if request.method == "POST":
        form = SteuerungForm(request.POST)
    else:
        form = SteuerungForm()

    if form.is_valid():
        steuerung=form.save(commit=False)
        steuerung.save()
        
    steuerungen=Steuerung.objects.all().order_by('steuerung')
    return render(request, 'daten/steuerung.html', {'form': form,'steuerungen':steuerungen})


def anlagenart(request):
    if request.method == "POST":
        form = AnlagenartForm(request.POST)
    else:
        form = AnlagenartForm()

    if form.is_valid():
        anlagenart=form.save(commit=False)
        anlagenart.save()
        
    anlagenarten=Anlagenart.objects.all().order_by('anlagenart')
    return render(request, 'daten/anlagenart.html', {'form': form,'anlagenarten':anlagenarten})


def aufnahme(request):
    if request.method == "POST":
        form = AufnahmeForm(request.POST)
    else:
        form = AufnahmeForm()

    if form.is_valid():
        aufnahme=form.save(commit=False)
        aufnahme.save()
        
    aufnahmen=Aufnahme.objects.all().order_by('aufnahme')
    return render(request, 'daten/aufnahme.html', {'form': form,'aufnahmen':aufnahmen})

und ein Beispiel Template

Code: Alles auswählen

{% extends 'layout.html' %}
{% block kopfzeile %}
    {{ kopf }}
{% endblock %}

{% block fusszeile %}
    Wird die Fusszeile
{% endblock %}

{% block menuleiste %}
    {% include 'sidebarmenu.html'%}
{% endblock %}

{% block content %}

    
    <form method="POST" class="post-form">{% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="save btn btn-default">Save</button>
    </form>
    <p></p>
    <table>
        <thead>
            <tr>
                <th>
                    ID
                </th>
                <th>
                    Toolart
                </th>
            </tr>
        </thead>
        <tbody>
            {% for toolart in toolarten %}
                <tr>
                    <td>
                        {{ toolart.id }}
                    </td>
                    <td>
                        {{ toolart.toolart }}
                    </td>
                </tr>
            {%endfor%}
        </tbody>
    </table>
{% endblock %}
das was ich anpassen muss ist das zwischen <tbody></tbody>

Erste möglichkeit.
alles zwischen <tbody></tbody> wird in verschiedene Templates ausgelagert der rest in eine basis.html

Zweite möglichkeit
oder nur eine html Datei und nur für das Tabellen füllen wird Dynamisch geändert

Re: Django mehrere Views in einem Template zusammenfassen

Verfasst: Mittwoch 17. April 2024, 17:39
von sparrow
Erste Möglichkeit.

Re: Django mehrere Views in einem Template zusammenfassen

Verfasst: Mittwoch 17. April 2024, 19:38
von noisefloor
Hallo,

du kannst mit `extend` (siehe: https://docs.djangoproject.com/en/5.0/r ... #templates) Blöcke in andere Templates einbinden und im Template mit `include` (siehe: https://docs.djangoproject.com/en/5.0/r ... s/#include) andere Templates in ein Template laden.

Bei relativ simplen Views wie die, die du hast, lohnt sich IMHO ein Blick auf Class-Based Views, spart Tipparbeit, weil die fertigen Klassen das automatisch erledigen.

Gruß, noisefloor