Python Django Tutorial (6)

Es ist ein Material für Lernsitzungen Dieses Mal werde ich über Bootstrap völlig weg vom ursprünglichen Tutorial erklären.

Tutorial Tutorial Tutorial 1 Tutorial 2 Tutorial 3 Tutorial 4 Tutorial 5Andere Tutorials

Quelle (Github)

Verwenden Sie Bootstrap

Es ist schwierig, HTML zu entwerfen, nicht wahr? Es wäre schön, wenn der Designer ein schönes HTML vorbereiten könnte, aber leider kann ich im Tutorial nicht auf so etwas hoffen. Für einen Amateur ist es jedoch schwierig, ein schönes CSS von Grund auf neu zu erstellen. Bootstrap für Sie! Bootstrap ist ein Framework, das Responsive Design-CSS, Javascript, Schriftart, Symbol usw. bereitstellt, das kostenlos verwendet werden kann (kommerzielle Nutzung ist ebenfalls möglich!).

Responsive Design ist ein Design, das die Anzeigebreite und das Layout automatisch an die Größe des Browsers anpasst. Das gleiche HTML kann auf PCs, Smartphones und Tablets wiederverwendet werden.

Honke Einführung in Tohohos Bootstrap Was ist Bootstrap? (Wikipedia)

django hat auch eine Bibliothek zum Verknüpfen mit Bootstrap, die genau richtig ist, um die Platzierung von CSS und Javascript zu üben. Ich möchte mich im Tutorial damit befassen.

Bootstrap-Download und Bereitstellung

Quelle → 6ce33b05

Laden Sie das Set von der Seite Honke herunter.

Kobito.2hc2qO.png

↓ Klicken Sie zum Überspringen auf die Schaltfläche Herunterladen

Kobito.7n9C3e.png

Verwenden Sie diesmal ** Bootstrap ** ganz links. Sie können eine Zip-Datei namens "bootstrap-3.3.6-dist.zip" herunterladen. Lassen Sie uns dies entpacken.

Kobito.9C8A5v.png 3.3.6 hat diese Dateistruktur.

Erstellen Sie als Nächstes einen Ordner mit dem Namen "static" in derselben Hierarchie wie "manage.py" im Lernprogramm und fügen Sie dort den gesamten Inhalt des entpackten Bootstraps ein. Die Dateistruktur nach dem Verschieben sollte wie folgt sein.

(tutorial)$ tree .
├── db.sqlite3
├── manage.py
├── polls
│   ├── __init__.py
│   ├── ...
│   └── views.py
├── requirements.txt
├── static  #Verzeichnis diesmal hinzugefügt
│   ├── css
│   │   ├── bootstrap-theme.css
│   │   ├── bootstrap-theme.css.map
│   │   ├── bootstrap-theme.min.css
│   │   ├── bootstrap-theme.min.css.map
│   │   ├── bootstrap.css
│   │   ├── bootstrap.css.map
│   │   ├── bootstrap.min.css
│   │   └── bootstrap.min.css.map
│   ├── fonts
│   │   ├── glyphicons-halflings-regular.eot
│   │   ├── glyphicons-halflings-regular.svg
│   │   ├── glyphicons-halflings-regular.ttf
│   │   ├── glyphicons-halflings-regular.woff
│   │   └── glyphicons-halflings-regular.woff2
│   └── js
│       ├── bootstrap.js
│       ├── bootstrap.min.js
│       └── npm.js
└── tutorial
    ├── __init__.py
    ├── ...
    └── settings.py

Ändern Sie die Django-Einstellungen

Quelle → 73d94740a Offizielle Dokumente Offizielles Dokument (Japanisch, aber Django 1.4)

Der angezeigte Inhalt von Seiten wie http: // localhost: 8000 / polls /, die im Lernprogramm erstellt wurden, hängt vom Inhalt der Datenbank ab. Solche Seiten (URLs) werden als dynamische Seiten, dynamische Seiten, dynamischer Inhalt usw. bezeichnet. Andererseits geben CSS- und JS-Dateien wie bootstrap.css beim Zugriff auf dieselbe URL immer denselben Inhalt zurück. Solche Seiten werden als statische Seiten, statischer Inhalt, statische Dateien usw. bezeichnet. Da sich der Inhalt des dynamischen Inhalts mit jedem Zugriff ändert, führen Sie das Programm (Python, Ruby, PHP usw.) und aus Sie müssen den Seiteninhalt ändern. Auf der anderen Seite ändert sich der statische Inhalt nicht, sodass nicht für jeden Zugriff eine Anfrage gestellt werden muss. Der Inhalt wird im Browser zwischengespeichert. Das Zwischenspeichern beschleunigt das Lesen und verringert die Belastung des Servers, hat jedoch auch den Nachteil, dass Änderungen im Inhalt nicht berücksichtigt werden.

In Django werden statische Dateien wie Bilddateien, CSS-Dateien und Javascript-Dateien als "statische Dateien" verwaltet. Es ist einfach zu handhaben, indem es während des Betriebs an einem Ort aufbewahrt wird.

Die Art und Weise, sie zusammenzusetzen, ist "$ ./manage.py collectstatic", aber Sie müssen diesen Befehl nicht verwenden, während Sie auf runserver ausgeführt werden. Ich werde die Bereitstellung (Installation des Servers) bald erläutern, daher werde ich dies zu diesem Zeitpunkt ausführlich erläutern.

Statische Dateien werden unter jeder App in das Verzeichnis "static" gekratzt, ohne dass urls.py eine URL hinzugefügt wird Sie können unter http: // localhost: 8000 / static / darauf zugreifen. Dieses Tutorial behandelt es nicht, aber wenn Sie umfragespezifisches CSS benötigen Installieren Sie es als polls / static / polls / css / polls.css Zugriff als "http: // localhost: 8000 / static / polls / css / polls.css". Statische Dateien wie die Django-Verwaltungssite befinden sich übrigens unter "django / contrib / admin / static / admin /".

Wenn es sich um eine Vorlage handelt, sieht sie wie "polls / templates / polls /" aus. Es mag überflüssig erscheinen, die App wie "templates / polls /" oder "static / polls /" zu benennen. Es scheint eine solche Struktur zu haben, weil es Namenskonflikte vermeidet und Codevorteile hat.

Das standardmäßig durchsuchte statische Verzeichnis befindet sich jedoch unter der App (INSTALLED_APPS in settings.py). Nur statische Dateien. Dieses Mal haben wir das Verzeichnis "static" in derselben Hierarchie wie "manage.py" erstellt. Daher müssen wir Einstellungen hinzufügen, damit dieses Verzeichnis auch gelesen werden kann. Um das Verzeichnis hinzuzufügen, in dem sich die statischen Dateien befinden, geben Sie das Verzeichnis an, das Sie mit einem Taple (oder einer Liste) zu "STATICFILES_DIRS" hinzufügen möchten.

Kobito.1pM05v.png Vor dem Einstellen wird es 404. (Aus verschiedenen Gründen wird es auf Port 13000 gestartet.)

tutorial/settings.py


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

Kobito.6wqhns.png Nach dem Einstellen kann CSS erhalten werden.

Vorlage ändern

Quelle → 63cdd0cc

Verwenden Sie das Vorlagen-Tag "{% static%}", um eine statische Datei aus einer Vorlage zu lesen. Zum Beispiel beim Laden von bootstrap.css <link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap.css' %}" /> Schreiben Sie wie folgt. Um das Tag "{% static%}" zu verwenden, müssen Sie zuerst "{% load staticfiles%}" schreiben.

Laden wir zunächst bootstrap.css auf der Listenseite.

polls/templates/polls/index.html


{% load staticfiles %}  <!--← Hinzufügen-->
<html>
  <head> <!--← Hinzufügen-->
    <link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap.css' %}" /> <!--← Hinzufügen-->
  </head> <!--← Hinzufügen-->
<body>
  <table border="1">
    <tr>
      <th>Inhalt der Frage</th>
      <th>Veröffentlichungsdatum</th>
      <th></th>
    </tr>
    {% for question in questions %}
    <tr>
      <td>{{ question.question_text }}</td>
      <td>{{ question.pub_date }}</td>
      <td><a href="{% url 'polls:detail' question.pk %}">Zum detaillierten Bildschirm</a></td>
    </tr>
    {% endfor %}
  </table>
</body>
</html>

Kobito.mXJ2pb.png before

Kobito.aIXL4h.png after

Ich spüre die Vorteile von CSS nicht, nur weil es klein ist. css zeigt seinen wahren Wert an, indem im HTML-Tag class angegeben wird.

Versuchen wir vorerst CSS für den Tisch. Wenn Sie gemäß der Bootstrap-Seite eine Tabellenklasse hinzufügen, können Sie für eine Tabelle entwerfen. Ich werde auch gestreift versuchen.

polls/templates/polls/index.html


...
<body>
  <table border="1" class="table table-striped">
    <tr>
      <th>Inhalt der Frage</th>
...

Kobito.RIiscq.png

Ja. Nur durch Hinzufügen von Klasse zu diesem Tabellen-Tag wurde es leicht zu einem solchen Design.

Vorlagenerweiterung

Offizielle Dokumente Offizielles Dokument (Japanisch, aber Django 1.4)

Es ist eine Vorlage, die ich bereits verwendet habe, die jedoch nur dann ihren wahren Wert anzeigt, wenn sie vererbt wird. Qiita, Bootstrap-Dokumentation, Django-Dokumentation, überall, aber auf jeder Site Die Kopf- und Fußzeilen beim Verschieben von Seiten sind grundsätzlich gleich, nur der Inhalt der Seite hat sich geändert, oder? In Anbetracht der Einheit innerhalb der Site ist das Framework innerhalb derselben Site natürlich dasselbe, und nur ein Teil ändert sich. Erstellen Sie eine Basisvorlage und erben Sie von dieser Vorlage, genau wie bei einer generischen Klassenansicht Indem Sie nur den Teil überschreiben, den Sie ändern möchten, können Sie die Codemenge reduzieren und eine Site erstellen, die gegen Änderungen resistent ist.

In diesem Abschnitt erstellen wir eine Basisvorlage und ersetzen die im Lernprogramm erstellte Vorlage. Machen Sie sich bereit, um das Bootstrap-Design einfach anzuwenden.

Erstellen einer Basisvorlage

Quelle → 741a853886

Wie auch immer, bereiten wir eine Basisvorlage vor. Wie bei der "statischen" Datei bereiten Sie im Fall der Vorlage das "Vorlagen" -Verzeichnis in derselben Hierarchie wie "manage.py" vor. Verwenden Sie es als Basisvorlagenspeicher.

Wenn es eine App gibt, die als Basis verwendet werden kann, z. B. "Dashboard", kann sie möglicherweise dort abgelegt werden.

Bei Vorlagen wird wie bei "statisch" standardmäßig nur das Verzeichnis "Vorlagen" unter der App angezeigt. Lassen Sie uns settings.py wie für static ändern. Beschreiben Sie im Fall einer Vorlage das Verzeichnis, das Sie zu DIRS in TEMPLATES hinzufügen möchten.

tutorial/settings.py


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  #←← Fügen Sie hier den Inhalt hinzu
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Als nächstes erstellen wir "base.html" in "Vorlagen". Der Hauptinhalt ist, ich werde [Bootstrap-Starter-Vorlage] verwenden (http://getbootstrap.com/examples/starter-template/). Es ist notwendig, den Inhalt zu ändern, aber vorerst fügen wir dasselbe ein und speichern es als "base.html".

Vorbereitung für die Vererbung und Änderung der Basis

Quelle → 2cca1ce20eb

Ich möchte es reparieren, während ich es mir vorerst anschaue Lassen Sie uns polls / templates / polls / index.html ändern, um base.html zu erben. Es ist einfach, schreiben Sie einfach am Anfang "{% erweitert" base.html "%}".

polls/templates/polls/index.html


{% extends "base.html" %}
{% load staticfiles %}
<html>
...

Wenn Sie sich in diesem Zustand "http: // localhost: 8000 / polls /" ansehen, sollte dies wie folgt aussehen.

Kobito.VImUOU.png

Ja, es ist ein Durcheinander. Dies liegt daran, dass der CSS-Pfad nicht korrekt ist.

Kobito.PWaw7X.png

Vorerst ist hier der Pfad von CSS und JS korrigiert und angezeigt. Das Ändern von HTML hat nichts mit Django zu tun, daher überspringe ich es. Bitte überprüfen Sie die Quelle.

Änderungsblöcke hinzufügen und überschreiben

Quelle → 8a3fe39358

Endlich die Hauptlinie. Lassen Sie uns die Fragenliste im Teil "Bootstrap-Starter-Vorlage" anzeigen, der derzeit auf dem Bildschirm angezeigt wird. Der Inhalt von <div class =" container "> in HTML entspricht diesem Teil. Löschen Sie ihn also und löschen Sie ihn. Ermöglicht das Überschreiben am Vererbungsziel.

templates/base.html(Vor der Korrektur)


    <div class="container">

      <div class="starter-template">
        <h1>Bootstrap starter template</h1>
        <p class="lead">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p>
      </div>

    </div><!-- /.container -->

templates/base.html(Überarbeitet)


    <div class="container">
    {% block contents %}{% endblock %}
    </div><!-- /.container -->

Löschen Sie den Inhalt und bereiten Sie das Tag "{% block%}" vor. Der Name kann alles sein, aber hier ist es "Inhalt".

Ändern Sie als Nächstes die geerbte Vorlage.

polls/templates/polls/index.html(Vor der Korrektur)


{% extends "base.html" %}
{% load staticfiles %}
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="{% static 'css/bootstrap.css' %}" />
  </head>
<body>
  <table border="1" class="table table-striped">
    <tr>
      <th>Inhalt der Frage</th>
      <th>Veröffentlichungsdatum</th>
      <th></th>
    </tr>
    {% for question in questions %}
    <tr>
      <td>{{ question.question_text }}</td>
      <td>{{ question.pub_date }}</td>
      <td><a href="{% url 'polls:detail' question.pk %}">Zum detaillierten Bildschirm</a></td>
    </tr>
    {% endfor %}
  </table>
</body>
</html>

polls/templates/polls/index.html(Überarbeitet)


{% extends "base.html" %}

{% block contents %}
  <table border="1" class="table table-striped">
    <tr>
      <th>Inhalt der Frage</th>
      <th>Veröffentlichungsdatum</th>
      <th></th>
    </tr>
    {% for question in questions %}
    <tr>
      <td>{{ question.question_text }}</td>
      <td>{{ question.pub_date }}</td>
      <td><a href="{% url 'polls:detail' question.pk %}">Zum detaillierten Bildschirm</a></td>
    </tr>
    {% endfor %}
  </table>
{% endblock contents %}

Das HTML-Tag, das Head-Tag und das Body-Tag sind nicht erforderlich, da sie in der Vererbungsquelle (templates / base.html) festgelegt sind. Ich möchte den Inhalt des Tags

in den Inhalt einfügen Es beginnt mit "{% Blockinhalt%}" und endet mit "{% Endblockinhalt%}". Für "{% endblock%}" ist kein Argument erforderlich, aber wenn der Inhalt des Blocks größer wird, ist es unmöglich zu wissen, welcher "Block" geschlossen wurde. Wenn "{% block%}" und "{% endblock%}" getrennt sind, ist es besser, so viel wie möglich zu schreiben.

Übrigens, wenn der Name nicht mit "{% block content%}" wie "{% endblock content%}" gepaart ist, tritt ein Fehler auf.

Lassen Sie uns nun überprüfen, was mit dem Browser passiert ist.

Kobito.OTzMq7.png

Die Tabelle klebt an der Kopfzeile, aber ich denke, das ist ein guter Punkt.

Ändern Sie base.html und fügen Sie polls / base.html hinzu

Quelle → e722778ee

Nachdem die TOP-Seite erstellt wurde, können Sie unter http: // localhost: 8000 / darauf zugreifen Bearbeiten Sie tutorial / urls.py. Da es jedoch keine tatsächliche Ansicht für die TOP-Seite gibt, ist der Inhalt vorerst derselbe wie "polls /". Der Name ist "index", aber bitte geben Sie ihm einen beliebigen Namen, wie "top" oder "home".

tutorial/urls.py


from django.conf.urls import include, url
from django.contrib import admin

from polls.views import index  #← Hinzufügen

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^polls/', include('polls.urls', namespace='polls')),
    url(r'^$', index, name='index'),  #← Hinzufügen
]

Ändern Sie dann den Wortlaut und die Links von "base.html".

templates/base.html


    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
		...
          <a class="navbar-brand" href="{% url 'index' %}">Tutorial</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="{% url 'polls:index' %}">polls</a></li>
            <li class=""><a href="{% url 'admin:index' %}">admin</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>

Hier ist ein wenig Einfallsreichtum. Class =" active " wird an <li> von Umfragen in <div id =" navbar "> angehängt. Mit "aktiv" wird die Kopfzeile wie unten gezeigt hervorgehoben, damit Sie leichter sehen können, wo Sie sich auf der Seite befinden. Kobito.fUGtFd.png

Ich möchte in Umfragen immer aktiv in die Vorlage einfügen, aber ich möchte sie in anderen Apps nicht hervorheben. Ändern Sie diesen Teil daher in {% block%}, damit er neu geschrieben werden kann.

templates/base.html


<li class="{% block nav_polls %}{% endblock %}"><a href="{% url 'polls:index' %}">polls</a></li>

Wenn jedoch nichts unternommen wird, müssen alle Vorlagen in "polls / templates / polls" geändert werden. Erstellen Sie daher "polls / templats / polls / base.html" und verwenden Sie die Vorlage unter "polls / templats / polls". Es erbt polls / base.html.

base.html
   └ polls/base.html
       ├ polls/index.html
       ├ polls/detail.html
       └ polls/results.html

polls/templates/polls/base.html


{% extends "base.html" %}

{% block nav_polls %}active{% endblock %}

Aktiv zu nav_polls hinzufügen

polls/templtes/polls/index.html


{% extends "polls/base.html" %}

Erben Sie polls / base.html anstelle von base.html

Übrigens, ändern wir es so, dass auch "detail.html" und "results.html" vererbt werden. Um dies zu beheben, fügen Sie "{% erweitert" polls / base.html "%}" in die erste Zeile ein, wie im Fall von "index.html". Fügen Sie einfach den Inhalt in {% block content%} ein.

Kobito.pxgSZ5.png

TOP Seite

Kobito.YlkGRA.png

Auswahlseite

Kobito.VjLnSb.png

Ergebnisseite

Django Bootstrap

Bis zu diesem Punkt habe ich die Template-Funktion von Django verwendet, um das CSS von Bootstrap selbst zuzuweisen. Ich glaube nicht, dass ich viel davon profitiert habe. In diesem Kapitel wird "Django-Bootstrap" vorgestellt, das das Design von Django leicht ersetzen kann.

https://github.com/dyve/django-bootstrap3 http://django-bootstrap3.readthedocs.org/en/latest/index.html

Einführung und Ersetzung des Formulars

Quelle → 498065d9fff

Um die Quelle auszuchecken und auszuprobieren, führen Sie pip install -r require.txt aus.

Sie können leicht mit pip eingeben.

Aufgrund der Bootstrap-Version lautet der Name "django-bootstrap3". Vergessen Sie nicht, "3" hinzuzufügen.

(tutorial)$ pip install django-bootstrap3
Collecting django-bootstrap3
  Downloading django-bootstrap3-6.2.2.tar.gz
Building wheels for collected packages: django-bootstrap3
  Running setup.py bdist_wheel for django-bootstrap3 ... done
...  
  
Successfully built django-bootstrap3
Installing collected packages: django-bootstrap3
Successfully installed django-bootstrap3-6.2.2

Öffnen Sie dann tutorial / settings.py und fügen Sie bootstrap3 zu INSTALLED_APPS hinzu.

tutorial/settings.py


INSTALLED_APPS = (
    'django.contrib.admin',
...
    'django.contrib.staticfiles',
    'bootstrap3',  #← Hinzufügen
    'polls',
)

Dies ist das Ende der Installationsarbeiten. Lassen Sie uns das Formular sofort neu schreiben. Dieses Mal werde ich das von polls / templates / polls / detail.html ausgegebene Formular neu schreiben.

Anstatt das Formular mit "{{form}}" auszugeben, verwenden Sie das Vorlagen-Tag "{% bootstrap_form%}", um das Formular auszugeben. Sie müssen bootstrap3 laden, bevor Sie es verwenden können.

polls/templates/polls/detail.html


{% extends "polls/base.html" %}
{% load bootstrap3 %}  <!--← Hinzufügen-->

{% block contents %}
<h1>{{ question.question_text }}</h1>

<form action="" method="post">
  {% csrf_token %}
  {% bootstrap_form form %} <!--← Korrektur-->
  <input type="submit" value="Vote" />
</form>
{% endblock contents %}

Eine Zeile wird hinzugefügt und eine Zeile wird geändert. Lassen Sie uns überprüfen, was auf dem Bildschirm passiert ist.

Kobito.EUxhO5.png

Die schwarzen Flecken, die verschwendet wurden, sind verschwunden. Versuchen Sie, die Taste "Abstimmung" zu drücken, ohne etwas auszuwählen.

Kobito.d0ide3.png

Mit dieser Art von Gefühl wird automatisch eine "echte" Fehlerprüfung hinzugefügt.

Kobito.0QI9Rr.png

Wenn Sie einen Wert senden, der nicht in den Optionen enthalten ist, sieht er folgendermaßen aus.

eingebaute Einstellungen

Quelle → 1f19af40

Das Formular ist übrigens so schön geworden, dass es mit nur zwei Zeilen verwechselt werden kann. Es ist jedoch mühsam, "{% load bootstrap3%}" einzeln zu schreiben. Schreiben Sie in settings.py, um das Template-Tag für bootstrap3 automatisch zu laden.

tutorial/settings.py


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'builtins': [
                'bootstrap3.templatetags.bootstrap3',  #←←← Fügen Sie dies hinzu
            ],
        },
    },
]

Übrigens können Sie hier ab django 1.9 schreiben. Vor django1.8 können Sie dasselbe mit der Methode django.template.base.add_to_builtins tun. Bei Verwendung des Tags "{% load%}" war es nur "bootstrap3", bei der Angabe mit integrierten Elementen "bootstrap3.templatetags.bootstrap3" Bitte beachten Sie, dass Sie nur gehen können, wenn Sie den Pfad bis zu "Vorlagen-Tags" wie in.

Löschen Sie die Beschreibung von load aus polls / templates / polls / detail.html und stellen Sie sicher, dass kein Fehler auftritt.

Nachrichtenanzeige

Quelle → a2d08a455

Wenn Sie nun eine Option auswählen und abstimmen, springt sie einfach zur Ergebnisseite. Lassen Sie uns ausgeben, was der Benutzer auf der Ergebnisseite abgestimmt hat.

Django-Dokumentation Django-Dokument (Japanisch)

django bietet einen Mechanismus, um einige Informationen als "Nachrichten" auf die nächste Seite zu übertragen. Um es zu verwenden, muss "django.contrib.messages" in INSTALLED_APPS in settings.py enthalten sein.

Wie admin ist es standardmäßig enthalten, sodass keine Einstellungen geändert werden müssen.

Fügen wir zunächst eine Nachricht hinzu. Wenn ich dieses Mal abstimme, möchte ich zeigen, welche Auswahl ich getroffen habe, also bearbeite form_valid in polls / views.py. Um eine Nachricht hinzuzufügen, übergeben Sie einfach die Nachricht, die Sie als "Anfrage" anzeigen möchten, an die Funktion "messages.success".

Zusätzlich zu "Erfolg" gibt es "Debug", "Info", "Warnung" und "Fehler".

polls/views.py


from django.contrib import messages
...

class Detail(SingleObjectMixin, FormView):
...
    def form_valid(self, form):
        form.vote()
        choice = form.cleaned_data['choice']
        messages.success(self.request, '"%s"Gewählt für' % choice)
        return super().form_valid(form)

Es ist etwas flüssiger, wenn Sie eine Nachricht (oder eine Instanz Ihrer Wahl) mit dem Rückgabewert der Abstimmung zurückgeben.

Als nächstes ist die Anzeige. Ich möchte die Nachricht auf allen Seiten anzeigen, also füge sie zu "base.html" hinzu. django-bootstrap3 unterstützt auch das Anzeigen von Nachrichten, so dass dies auch einfach ist.

templates/base.html


...
    <div class="container">
    {% if messages %}
    {% bootstrap_messages messages %}
    {% endif %}
    {% block contents %}{% endblock %}
    </div><!-- /.container -->
...

Kobito.joC23A.png

Die Nachricht wird jetzt so angezeigt. Wenn Sie die x-Taste auf der rechten Seite drücken, wird diese Meldung ausgeblendet.


Zum nächsten Tutorial

Andere Tutorials

Recommended Posts

Python Django Tutorial (5)
Python Django Tutorial (2)
Python Django Tutorial (6)
Python Django Tutorial (7)
Python Django Tutorial (1)
Python Django Tutorial Tutorial
Python Django Tutorial (3)
Python Django Tutorial (4)
Zusammenfassung des Python Django-Tutorials
Python-Tutorial
Python Django Tutorial Cheet Sheet
Zusammenfassung des Python-Tutorials
Django Tutorial Memo
Starten Sie das Django Tutorial 1
Django 1.11 wurde mit Python3.6 gestartet
[Docker] Tutorial (Python + PHP)
Django Python Web Framework
Django Polymorphic Associations Tutorial
Django Oscar einfaches Tutorial
Versuchen Sie Debian + Python 3.4 + django1.7 ……
Python OpenCV Tutorial Memo
[Python-Tutorial] Datenstruktur
Django Girls Tutorial Hinweis
Cloud Run Tutorial (Python)
Python Django CSS reflektiert
Mach Django mit CodeStar (Python3.6.8, Django2.2.9)
Fangen Sie mit Django an! ~ Tutorial ⑤ ~
Einführung in Python Django (2) Win
[Python-Tutorial] Kontrollstruktur-Tool
Python
Mach Django mit CodeStar (Python3.8, Django2.1.15)
Python3 + Django ~ Mac ~ mit Apache
ToDo-Listenerstellung [Python Django]
Erste Schritte mit Python Django (1)
Django
Erste Schritte mit Python Django (4)
Erste Schritte mit Python Django (3)
Fangen Sie mit Django an! ~ Tutorial ⑥ ~
Installieren Sie Python 3.7 und Django 3.0 (CentOS)
[Python] Persönliches Tutorial zum Entscheidungsbaum
GAE + Python + Django süchtig machende Geschichte
Einführung in Python Django (6)
Erste Schritte mit Python Django (5)
Bis zur Veröffentlichung von Python [Django] de Web Service [Tutorial Teil 1]
8 häufig verwendete Befehle in Python Django
Erstellen Sie eine neue Anwendung mit Python, Django
Python + Django + Scikit-Learn + Mecab (1) mit Heroku
Python + Django + Scikit-Learn + Mecab (2) mit Heroku
Führen Sie python3 Django1.9 mit mod_wsgi aus (deploy)
Django Girls Tutorial Zusammenfassung Erste Hälfte
Stolpern Sie beim Django 1.7-Tutorial
Stellen Sie das Django-Lernprogramm für IIS bereit ①
Installieren Sie das Python Framework Django mit pip
Einführung in Python Django (2) Mac Edition
[Python Tutorial] Eine einfache Einführung in Python
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 5 ~
Lernverlauf für die Teilnahme an der Entwicklung von Team-Apps mit Python ~ Django Tutorial 4 ~
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 1, 2, 3 ~
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 6 ~
Lernverlauf für die Teilnahme an der Team-App-Entwicklung mit Python ~ Django Tutorial 7 ~