2

私はこの Django のこと全体に慣れていないので、古い関数ベースの Generics ではなく、ClassBased GenericViews から始めることにしました。とにかく、これまでのところ、GenericViews が本当に好きで、デコレータで拡張してきました。

私がやっていることの簡単な例

ideapad/urls.py

from ideapad.views import *

urlpatterns = patterns('ideapad.views',
        url(r'^$', IndexListView.as_view(), name='url_index'),
        )

ideapad/views.py

from django.views.generic import ListView
from ideapad.models import Idea
from sauce.decorators import sort_queryset

@sort_queryset('-date')
class IndexListView(ListView):
    model = Idea
    template_name = 'ideapad/index.html'
    context_object_name = 'ideas'

sauce/decorators.py

def sort_queryset(default_sort):
    """
    Decorator that sorts queryset according to GET data
    Made to wrap GenericViews with get_queryset methods
    """
    def decorator(cls):
        fn=cls.get_queryset
        def wrapper(self):
            queryset = fn(self)
            sortmethod = self.request.GET.get('sort', default_sort)
            if hasattr(queryset, 'order_by'):
                queryset = queryset.order_by(sortmethod)
            return queryset
        cls.get_queryset=wrapper
        return cls
    return decorator

私の質問は、全体的な読みやすさと保守性の問題として、これを行うための「より良い」または「より受け入れられる」方法はありますか? それともコーディングスタイルの好みですか?

私が尋ねる理由は、この方法の方が読みやすいと思いますが、いつかこれでお金を稼ぎたいと思っており、同僚を怒らせるような奇妙なコーディングの習慣を身につけたくないので、コーディング スタイルは高く評価されます。ありがとう。

4

1 に答える 1

3

これはこれを行う適切な方法です(コードを編集しました):

ideapad/views.py

from django.views.generic import ListView
from ideapad.models import Idea
from sauce.decorators import SortQuerysetMixin

class IndexListView(SortQuerysetMixin, ListView):
    default_sort = '-date'
    model = Idea
    template_name = 'ideapad/index.html'
    context_object_name = 'ideas'

sauce/decorators.py

class SortQuerysetMixin(object):
    def get_queryset(self):
        queryset = super(SortQuerysetMixin, self).get_queryset()
        sortmethod = self.request.GET.get('sort', self.default_sort)
        if hasattr(queryset, 'order_by'):
            queryset = queryset.order_by(sortmethod)
        return queryset
于 2012-04-14T21:22:28.777 に答える