J'ai lu aujourd'hui que Django 1.3 alpha est l'expédition, et la plupart des vanté nouveauté est l'introduction de la classe de base des points de vue.
J'ai lu la documentation pertinente, mais j'ai du mal à voir le gros avantage™ que je pourrais obtenir de l'aide, donc je pose la question ici pour de l'aide dans la compréhension.
Prenons un exemple avancé de la documentation.
urls.py
from books.views import PublisherBookListView
urlpatterns = patterns('',
(r'^books/(\w+)/$', PublisherBookListView.as_view()),
)
views.py
from django.shortcuts import get_object_or_404
from django.views.generic import ListView
from books.models import Book, Publisher
class PublisherBookListView(ListView):
context_object_name = "book_list"
template_name = "books/books_by_publisher.html",
def get_queryset(self):
self.publisher = get_object_or_404(Publisher, name__iexact=self.args[0])
return Book.objects.filter(publisher=self.publisher)
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(PublisherBookListView, self).get_context_data(**kwargs)
# Add in the publisher
context['publisher'] = self.publisher
return context
Et maintenant, nous allons la comparer à un "bon vieil points de vue" de la solution, faite par moi-même en 5 minutes pour cette question (je m'excuse pour toute erreur que vous pouvez trouver en elle).
urls.py
urlpatterns = patterns('books.views',
url(r'^books/(\w+)/$', 'publisher_books_list', name="publisher_books_list"),
)
views.py
from django.shortcuts import get_object_or_404
from books.models import Book, Publisher
def publisher_books_list(request, publisher_name):
publisher = get_object_or_404(Publisher, name__iexact=publisher_name)
book_list = Book.objects.filter(publisher=publisher)
return render_to_response('books/books_by_publisher.html', {
"book_list": book_list,
"publisher": publisher,
}, context_instance=RequestContext(request))
La deuxième version me semble:
- L'équivalent dans la fonctionnalité
- Beaucoup plus lisible (
self.args[0]
? terrible!) - Plus courte
- Pas moins SECS compatible
Est-il quelque chose de grand, je suis absent? Pourquoi devrais-je utiliser? Sont celles de la documentation? Si oui, alors ce serait l'idéal en cas d'utilisation? Sont mixin qui est utile?
Merci d'avance à toute personne qui contribue!
P. S. pour ceux qui pourraient se demander, je n'ai jamais été fasciné par les génériques point de vue ainsi: dès que j'ai besoin de quelques fonctionnalités avancées, ils sont devenus plus courte que les points de vue.