Django: mit Buttons Tabelleneinträge durch klicken

Django, Flask, Bottle, WSGI, CGI…
Antworten
jb_alvarado
User
Beiträge: 8
Registriert: Mittwoch 11. Juli 2018, 11:11

Mittwoch 11. Juli 2018, 11:28

Hallo Allerseits,
ich arbeite noch nicht so lange mit Python und habe gerade frisch mit Django angefangen. Ich denke für mein Problem gibt es sicher schon zig Beispiele im Internet, aber irgendwie suche ich wohl mit den falschen Schlüsselworten.

Sagen wir ich habe eine Datenbank-Tabelle mit 100 Spalten und ich möchte mir nur 20 auf einmal anzeigen lassen. Nun würde ich gerne mit zwei Buttons bewerkstelligen, dass ich in der Tabelle vor und zurück navigieren kann. Also wenn ich auf next klicke sollen die nächsten 20 Spalten angezeigt werden, und wenn ich last klicke eben die letzten 20.

Hier ist mein jetziger Code, noch komplett ohne Logik:

urls.py von app:

Code: Alles auswählen

from django.urls import re_path
from . import views

urlpatterns = [
    re_path(r'^$', views.index, name='index'),
    re_path(r'^history/$', views.history, name='history'),
]
models.py:

Code: Alles auswählen

from django.db import models


class Tapes(models.Model):
    label = models.CharField(max_length=10)
    tape_fs = models.CharField(max_length=8)
    inuse = models.DecimalField(max_digits=10, decimal_places=0, default=0)
    free = models.DecimalField(max_digits=10, decimal_places=0, default=1345)
    folders = models.TextField()
    created_at = models.DateField(("Date"), auto_now_add=True)

    def __str__(self):
        return self.label

    class Meta:
        verbose_name_plural = "Tapes"

views.py:

Code: Alles auswählen

from django.shortcuts import render
from .models import Tapes


# Create your views here.
def index(request):
    context = {
        'title': 'Tape Backup',
    }

    return render(request, 'frontend/index.html', context)

def history(request):
    tapes = Tapes.objects.all()[:20]

    context = {
        'title': 'Tapes in Database',
        'tapes': tapes
    }

    return render(request, 'frontend/history.html', context)
history.html:

Code: Alles auswählen

{% extends 'frontend/layout.html' %}
{% block content %}

<div id="page-content" class="container">
    <div class="space">
        <h4>{{tapes.title}}</h4>
    </div>
    <div class="row">
        <div class="col-lg-12" style="padding: 10px;">
            <table id="historyTable" class="table table-striped">
                <thead>
                    <tr>
                        <th>Backup ID</th>
                        <th>Label</th>
                        <th>Tape FS</th>
                        <th>In Use</th>
                        <th>Free</th>
                        <th>Folders</th>
                        <th>Date</th>
                        <th>Print Label</th>
                    </tr>
                </thead>
                <tbody>
                    {% for tape in tapes %}
                    <tr>
                        <td>{{tape.id}}</td>
                        <td>{{tape.label}}</td>
                        <td>{{tape.tape_fs}}</td>
                        <td>{{tape.inuse}}GB</td>
                        <td>{{tape.free}}GB</td>
                        <td>{{tape.folders}}</td>
                        <td>{{tape.created_at}}</td>
                        <td><input type="checkbox" class="print" name="print" /></td>
                    </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>
        <div class='col-xs-12 button-wrapper'>
            <a href="/" id="history" class="btn">Home</a>
            <a href="/" id="last" class="btn">Last</a>
            <a href="/" id="next" class="btn">Next</a>
            <a href="#" id="print_label" class="btn">Print</a>
        </div>
    </div>
</div>

{% endblock %}
Wäre super, wenn ihr mir hier weiterhelfen könntet!
Benutzeravatar
__blackjack__
User
Beiträge: 1451
Registriert: Samstag 2. Juni 2018, 10:21

Mittwoch 11. Juli 2018, 11:47

@jb_alvarado: Suchschlüsselwort ist „paginate“ und es gibt da wohl was von Ratio… äh, ich meine von Django selbst. Such mal nach `Paginator` und `Page` in der Django-Dokumentation.

Edit: Und ich nehme mal ganz stark an Du hast Spalten mit Zeilen/Datensätzen verwechselt. ;-)

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
jb_alvarado
User
Beiträge: 8
Registriert: Mittwoch 11. Juli 2018, 11:11

Mittwoch 11. Juli 2018, 12:24

__blackjack__ hat geschrieben:
Mittwoch 11. Juli 2018, 11:47
@jb_alvarado: Suchschlüsselwort ist „paginate“ und es gibt da wohl was von Ratio… äh, ich meine von Django selbst. Such mal nach `Paginator` und `Page` in der Django-Dokumentation.
Perfekt! Danke, das reicht mir schon, hier ist alles beschrieben was ich brauche: https://docs.djangoproject.com/en/2.0/t ... agination/
__blackjack__ hat geschrieben:
Mittwoch 11. Juli 2018, 11:47
Edit: Und ich nehme mal ganz stark an Du hast Spalten mit Zeilen/Datensätzen verwechselt. ;-)
Jup, hast recht :)
Antworten