如何在django中创建方法视图?
我有以下代码:如何在django中创建方法视图?,django,Django,我有以下代码: class StoryViewClass(ListView): ... some listview methods here for one set of urls def saveStory(self,request,context_object_name, template_name, success_template): if request.method == "POST": form =
class StoryViewClass(ListView):
... some listview methods here for one set of urls
def saveStory(self,request,context_object_name,
template_name,
success_template):
if request.method == "POST":
form = StoryForm(request.POST)
form.user = request.user.id
if form.is_valid():
form.save()
if (success_template):
return render_to_response(success_template)
else:
return render_to_response('accounts/addStorySuccess.html')
else:
form = StoryForm()
if (context_object_name):
contextName = context_object_name
else:
contextName = 'form'
if (template_name):
return render_to_response(template_name,{contextName:form})
else :
return render_to_response('accounts/addStory.html',{contextName:form})
(这本身就很糟糕,以后再详细介绍)
我如何从我的url中调用它
我目前正在尝试:
url(r'^addStory/$',
StoryShowView.saveStory(
context_object_name='form',
template_name='accounts/addStory.html',
success_template='accounts/addStorySuccess.html'
)
),
但是django抱怨说
unbound method saveStory() must be called with StoryShowView instance as first argument (got nothing instead)
Request Method: POST
我的问题是:
这不是使用Django基于类的视图的方式。必须通过
as\u view()
方法从url.py引用这些内容。它们并不意味着每个类都有一个以上的视图呈现方法——如果您需要,最好将公共代码放在基类中并将其子类化。但在您的情况下,您可能只想更多地使用现有的方法—例如,为了确定要渲染的模板,您应该覆盖get\u template\u names()
Ah。如果它们不需要有多个视图渲染方法,那么将它们划分为类又有什么意义呢?并不是说我不同意你的观点-我接受它-我只是不理解这个决定背后的理念。因为你可以将它们分类。嗯。好吧,既然我可以对它们进行子类化,那么就没有理由让一个类(ClassA)显示故事列表并准备一个表单添加到故事中,而让一个ClassA的子类(ClassB)处理ClassA中定义的表单提交,对吗?因为子类化没有什么好处?也就是说,我可能有ClassA和ClassC,其中ClassC不是ClassA的子类?