2016-07-22 13 views
1

Ich versuche, einen Seitentitel anzugeben, der auf der Registerkarte Browser in einer Datei views.py für eine klassenbasierte Ansicht angezeigt wird. Ich arbeite mit einer Datei, die eine Basis-Vorlage HTML-Seite für viele verschiedene Seiten verwendet, wo ich den Titel mit etwas angeben versuche wie:Wie spezifiziert man einen Seitentitel in einer django views.py Datei mit einer Kontextvariablen?

{% block title %}{{ view.build_page_title }}{% endblock %} 

in der views.py Datei, die ich so etwas wie dies versuchen:

class ExampleReportView(BaseReportView): 

    def build_page_title(self): 
     return 'Example Page Title' 

Dies scheint nicht zu funktionieren. Ich bin ein absoluter Anfänger in Django Python. Danke für jede Hilfe!

+0

Wie sieht 'BaseReportView' aus? –

+0

An der Spitze der views.py Datei, um sie mit Beginn des Einsatzes: Klasse BaseReportView (BaseSecureView): und hat viele Definitionen unter, dass, wie: def build_report_title (self): Erhöhung NotImplementedError ('implementieren müssen build_report_title, um den Namen des Berichts zurückzugeben ') – user3408132

Antwort

2

Sie übergeben keine Werte an die Vorlage, indem Sie beliebige Methoden für Ihre Ansichtsklasse definieren. Die Vorlage hat keinen Zugriff auf die Ansicht.

Stattdessen ruft die Ansichtsklasse get_context_data auf, um die Werte zu ermitteln, die an die Vorlage übergeben werden sollen. Sie können dies überschreiben und Ihren eigenen Wert hinzufügen.

class ExampleReportView(BaseReportView): 

    def get_context_data(self, *args, **kwargs): 
     data = super(ExampleReportView, self).get_context_data(*args, **kwargs) 
     data['build_page_title'] = 'Example Page Title' 
     return data 

Natürlich können Sie innerhalb dieser Methode beliebig viele Werte hinzufügen.

+0

Tatsächlich war die View-Instanz Teil des Kontexts [seit 1.5] (https://docs.djangoproject.com/en/1.9/releases/1.5/#new-view- In diesem Kontext ist der Kontext der Variablen in der Klasse genau definiert. Ich bin mir nicht sicher, ob ich dieses Muster beim Überschreiben von 'get_context_data()' mag, aber es ist trotzdem möglich. – knbk

+0

Zeigt, wie oft ich klassenbasierte Ansichten verwende. Erinnert mich ein bisschen an das Angular-Controller-Muster. –

+0

Darn aus irgendeinem Grund bekomme ich es immer noch nicht zu zeigen - ich muss etwas falsch machen. Ich habe versucht, diese get_context_data-Methode oben zu verwenden und verwende {% block title%} {{view.build_page_title}} {% endblock%} im HTML, aber kein Glück. Ich kann jemanden in meinem Team haben versuchen zu helfen, wenn sie können. Ich werde jeden Erfolg veröffentlichen, den ich habe. Danke – user3408132