webentwicklung-frage-antwort-db.com.de

Eigene Django-Ansicht in die Admin-Seite

Ich habe eine benutzerdefinierte Ansicht erstellt.

Wie kann ich die Ansicht in den Admin einfügen? 

Für eine normale Admin-Klasse können wir sie einfach bei der Admin-Site registrieren:

class ListAdmin(admin.ModelAdmin):
   ...

admin.site.register(List, ListAdmin)

Ich habe versucht, get_url in admin.py zu überschreiben. Question_list ist die Ansicht:

class ListAdmin(admin.ModelAdmin):
    def list_view(self, request):
        return question_list(request)

    def get_urls(self):
        urls = super(ListAdmin, self).get_urls()
        list_urls = patterns('', r'^list/$', self.list_view())

        return list_urls + urls

admin.site.register(question_list, ListAdmin)

Dies ist die Fragelistenansicht:

def question_list(request):
    #questions = Question.objects.filter(topic__icontains = 1)
    questions = Question.objects.all()
    return render_to_response('admin/question_list.html', {'questions':questions})
question_list = staff_member_required(question_list)

Ich bekomme 'Funktions'-Objekt ist kein iterierbarer Fehler.

Vielen Dank.

28
kelvin

Basierend auf den von Ihnen bereitgestellten Informationen sollten Sie diesen Teil der Dokumentation von Django überprüfen:

Hinzufügen von Ansichten zu Administrationssites (Hinweis: Der Link ist für Version 1.5 gültig, da Version 1.3 nicht mehr unterstützt wird - die Lösung ist noch gültig).

Dann können Sie in diesem Blogbeitrag und dieser Frage nach weiteren Inspirationen und Details suchen.


An Ihrem Beispiel verstehe ich wirklich nicht, warum Sie keine reguläre ModelAdmin mit einigen Filteroptionen verwenden :

class QuestionAdmin(admin.ModelAdmin):
    list_filter = ('topic',)
20
arie

Das Muster erhält eine Ansicht, nicht das Ergebnis des Aufrufens der Ansicht, d. H .:

list_urls = patterns('', r'^list/$', self.list_view())

sollte sein

list_urls = patterns('', r'^list/$', self.list_view)

Auch "list_view" (zu diesem Zeitpunkt) ist eine Ansicht wie jede andere. Daher muss ein HttpResponse-Objekt zurückgegeben werden.

def list_view(self, request):
    return question_list(request)

Sie zeigen nicht den Code für question_list () an, aber ich habe den Verdacht, dass keine HttpResponse zurückgegeben wird.

P.S .: Wenn Sie das Traceback der "Funktion" Objekt ist nicht iterierbar "Ausnahme (Sie erhalten dies, wenn Sie" Liste/"?)?.

5
Danny W. Adair

Hier ein Beispiel für alles, was zum Hinzufügen (ab Django 1.6) für eine benutzerdefinierte Seite erforderlich ist, auf die über eine Schaltfläche neben der Schaltfläche "Verlauf" oben rechts auf der Detailseite eines Objekts eine Verknüpfung hergestellt wird:

https://Gist.github.com/mattlong/4b64212e096766e058b7

3
mateolargo

Sie sollten get_urls in Ihrer ModelAdmin-Unterklasse überschreiben.

0
Vasil