我想使用基于类的视图创建一个等效的“method_splitter”,以便删除我的 URL confs 中的一些硬编码。
我想要以下网址:
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()),