URL conf のハードコーディングを削除するために、クラスベースのビューを使用して同等の"method_splitter"を作成したいと考えています。
次の URL を取得したいと考えています。
ListView: http://mysite.com/<model_name>/
DetailView: http://mysite.com/<model_name>/<field_value>/
ListView のクエリは次のようになります。
<model_name>.objects.all()
DetailView のクエリセットは次のようになります。
<model_name>.objects.get(<field>=<field_Value>)
現在、私のビューは URL conf のハードコーディングの結果として機能しますが、スケーリングできるエレガントなソリューションを見つけたいと考えています。
私のソリューションでは 404 は返されませんが、何も表示されません。
ビュー.py
class ListOrDetailView(View):
def __init__(self, **kwargs):
for key, value in kwargs.iteritems():
setattr(self, key, value)
try: #If/Else instead?
def goToDetailView(self, **kwargs):
m = get_list_or_404(self.kwargs['model']) #Is this even needed?
return DetailView(model=self.kwargs['model'], slug=self.kwargs['slug'], template_name='detail.html', context_object_name='object')
except: #If/Else instead?
def goToListView(self, **kwargs):
q = get_object_or_404(self.kwargs['model'], slug=self.kwargs['slug']) #Is this even needed?
return ListView(model=self.kwargs['model'], template_name='list.html', context_object_name='object_list',)
MyApp の urls.py
url(r'^(?P<model>[\w]+)/?(?P<slug>[-_\w]+)/$', ListOrDetailView.as_view()),