2016-04-05 6 views
0

Ich mag Djando Admin eine Liste von Objekt zu meiner benutzerdefinierten Vorlage zu übergeben, delete_view und change_view. Ich habe base_site.html modifiziert, um eine Nav-Leiste einzubinden, und ich möchte aus der Sicht eine Liste von Objekten an die Nav-Leiste übergeben.Hinzufügen von Inhalten zu jeder Ansicht (base_site.html) in Django Admin

Ich habe es zuvor für django Admin-Index, changelist_view und add_view sowie. Ich überschreibe diese Funktion und füge den zusätzlichen Inhalt hinzu, den ich will.

Aber ich kann es nicht in den ersten beiden tun. Die Idee sollte diese:

@csrf_protect_m 
@transaction.atomic 
def delete_view(self, request, object_id, extra_context=None): 
    extra_context = extra_context or {}     
    mygetModels = getModels() 
    extra_context["modelsTables"] = mygetModels.getTablesModels() 
    return super(table_NameAdmin, self).delete_view(request, object_id, extra_context) 

Wie ich sagte, dass vor in changelist_view, Index- und add_view funktioniert. Aber funktioniert nicht in delete_view und change_view.

+1

Versuchen Sie, eine [benutzerdefinierte Vorlage tag] Schreiben (https://docs.djangoproject.com/en/1.9/howto/custom-template -tags/# simple-tags) und fügen Sie sie in Ihre Admin-Vorlage ein. Auf diese Weise müssen Sie nicht jede einzelne Admin-Ansicht überschreiben, nur um einige Elemente zum Vorlagenkontext hinzuzufügen. – Alasdair

+0

Nun ... sieht in der Tat besser aus. So definiere ich meine Funktion als: @ register.simple_tag def getTablesModels (Selbst-): Klassen = apps.apps.get_models (DDBB) modelClasses = [] für i in xrange (len (Klassen)): obj = dbModels (Klassen [i] .__ name __. lower(), Klassen [i] ._ meta.db_table) modelClasses + = [obj] Rückgabe modelClasses Wie rufe ich es auf My index admin template? Sollte ich etwas importieren? Ich muss durch alle Liste gehen, die dieses Tag zurückgibt {% für Artikel in modesTables%}

  • a href = "/ admin/db/{{item.linkDb}} /"> {{item.nameDb} }
  • {% endfor%} –

    +0

    Bitte nicht Code in den Kommentaren, es ist unmöglich zu lesen. – Alasdair

    Antwort

    1

    Von dem Code, den Sie geschrieben haben, bin ich nicht sicher, warum Ihre delete_view nicht funktioniert. Ich schlage einen anderen Ansatz vor, um dem Kontext Elemente hinzuzufügen.

    Versuchen Sie, die Methode each_context Ihrer Verwaltungssite zu überschreiben. Dadurch wird vermieden, dass mehrere Modellverwaltungsmethoden überschrieben werden müssen.

    def each_context(self, request): 
        context = super(MyAdminSite, self).each_context(request) 
        context['extra_var'] = 'Extra variable' 
        return context 
    

    Wenn Sie diese Variablen in Vorlagen außerhalb des Django Admin verwenden wollten, könnten Sie einen custom template tag oder context processor schreiben.

    Wenn Sie Django 1.9+ verwenden, können Sie mit dem simple_tag Dekorator das Ergebnis des Tags in einer Variablen speichern.

    {% getTablesModels as modelsTables %} 
    

    Dann können Sie die Variable in der Vorlage verwenden

    {% for item in modelsTables %} 
    
    +0

    Das ist was ich will. Du hast es wieder getan Alasdair ...;). Danke Kamerad. –

    Verwandte Themen