2016-06-30 7 views
0

as_view nur Argumente akzeptiert, die bereits Attribute der Klasse sindPostList() hat ein ungültiges Schlüsselwort ‚template_name‘

Diese für mich keinen Sinn machen, da template_name ein Attribut ist. Ich habe nach ähnlichen Fragen gesucht, konnte aber keinen Hinweis darauf finden, wo ich mit dem Code falsch gelaufen bin. Hier ist mein Code.

urls.py:

from django.conf.urls import url 
from .views import PostList 

urlpatterns = [ 
    url(r'^$', 
     PostList.as_view(
      template_name='blog/post_list.html'), 
     name='blog_post_list'), 
] 

views.py

from django.views.generic import View 
from .models import Post 


class PostList(View): 
    def get(self, request): 
     return render(
      request, 
      'blog/post_list.html', 
      {'post_list': Post.objects.all()}) 
+0

Selbst wenn PostList ein Argument template_name akzeptiert hat, verwenden Sie es offensichtlich nicht wie Sie Schreiben Sie den Namen der Vorlage direkt in 'get'. –

+0

Danke. Django und Python sind neu für mich, aber mit Ihrer Hilfe konnte ich die Lösung sofort anwenden. Das war genau das, was ich brauchte. – coderanger1

Antwort

3

Die View Klasse, hat kein template_name Attribut, Sie wollen entweder TemplateView verwenden, oder es würde mehr Sinn machen zu verwenden ein ListView

class PostList(ListView): 
    context_object_name = 'post_list' 
    template_name = 'blog/post_list.html' 
    def get_queryset(self): 
     return Post.objects.all() 

Hinweis: Wie auch immer, da Sie den Vorlagennamen in Ihrer Ansicht bereits festgelegt haben, müssen Sie ihn nicht wirklich in den Aufruf von as_view einfügen.

+1

Da op benötigt Post.objects.all() ohne jegliche Anpassung, können wir tun: model = Post anstelle von get_queryset Methode –

+1

@VinayakKaniyarakkal - Ich habe versucht, zu viele Änderungen an der OP-Code zu vermeiden, damit es immer noch etwas Ähnlichkeit hat aber sicher, das würde auch funktionieren – Sayse

Verwandte Themen