2013-12-11 45 views
2

我想知道如何为django UpdateView页面构建“预览”按钮。django updateview预览按钮

我第一次添加第二个按钮,我的形式,我的模板:

<button type="preview" class="btn btn-default" value="preview" name="preview">{% trans 'Preview' %}</button> 

然后我重写我的代码form_valid方法:

def form_valid(self, form): 
    if 'preview' in self.request.POST: 
     #??? Don't know what to do here 
    return super(SongEditView, self).form_valid(form) 

但我不知道哪些方法调用刷新UpdateView,同时使用当前表单值而不是数据库值。这可能与上下文有关......但我没有找到调用什么方法刷新(渲染?)我的页面。

PS:从“stackoverflow”预览是非常棒的,如何做到这一点,使用AJAX?

回答

1

我找到了解决方法(可能不是最好的):

我有我的模板2个按钮(名称相同,但不同的值))

<button type="submit" class="btn btn-default" value="submit" name="submit">{% trans 'Submit' %}</button> 
<button type="preview" class="btn btn-default" value="preview" name="submit">{% trans 'Preview' %}</button> 

在form_valid(我把会话中的预览如果用户点击预览按钮,然后再次呼叫我的页面。

def form_valid(self, form): 
    if self.request.POST['submit'] == 'preview': 
     self.request.session['previewsong'] = self.request.POST['body'] 
     return HttpResponseRedirect(reverse('editsong', args={self.object.id, self.object.nice_url})) 
    return super(SongEditView, self).form_valid(form) 

最后,我还覆盖get_context_data方法从会话值读取会话信息,并填写表格和预览。

def get_context_data(self, **kwargs): 
    context = super(SongEditView, self).get_context_data(**kwargs) 
    if('previewsong' in self.request.session): 
     context['preview'] = self.request.session['previewsong'] 
     context['form'].initial['body'] = self.request.session['previewsong'] 
     del self.request.session['previewsong'] 
    return context 

有没有更好的方法来做到这一点?我无法使用JavaScript,因为我有一些Django过滤器来显示渲染。