django - 如何创建预览视图

时间:2012-09-14 15:40:05

标签: django django-forms django-views

我有一个添加页面来创建一个新帖子。我想添加一个链接(ahref)来预览帖子。我有一个表单和一个提交按钮将帖子保存到数据库中。我应该使用相同的表格进行预览。当我点击“预览”链接时,页面必须重定向到'preview.html',我可以在其中显示表单的值。

我被卡住了。我无法在脑海中为此创造算法。有一页。一个表格。一个视图(addPost)。我需要通过另一个具有另一个模板文件的视图来获取此表单的值。

我在模型py中有两个字段,称为'titlepreview'和'bodyPreview'。在预览页面中查看表单的值;表格数据应写入这两个字段。

这里是models.py:

class Post(models.Model):
    owner = models.ForeignKey(User)
    title = models.CharField(max_length = 100)
    body = models.TextField()
    bodyPreview = models.TextField() #preview 
    titlePreview = models.CharField(max_length=100) # preview 
    slug = AutoSlugField(populate_from='title',unique=True)
    posted = models.DateField(auto_now_add=True)
    isdraft = models.BooleanField(default=False)

这是我的add_post视图:

@login_required(login_url='/login/')
def add_post(request):
    if request.method=="POST":
        form = addForm(request.POST)
        if form.is_valid():
            titleform=form.cleaned_data['title']
            bodyform=form.cleaned_data['body']
            checkform=form.cleaned_data['isdraft']
            owner = request.user
            n = Post(title = titleform, body = bodyform, isdraft=checkform, owner=owner)
            n.save()
            return HttpResponseRedirect('/admin/')

    else:
        form=addForm()
        return render(request,'add.html',{'form':form,})
    return render_to_response('add.html',{'form':form,},context_instance=RequestContext(request))

我的addForm表单:

class addForm(forms.Form):
    title = forms.CharField(max_length=100,widget=forms.TextInput(attrs={'placeholder':'Buraya Başlık Gelecek',}))
    body = forms.CharField(widget=forms.Textarea(attrs={'placeholder':'Buraya Metin Gelecek','rows':'25','cols':'90',}))
    isdraft = forms.BooleanField(required=False)
    #ispreview = forms.BooleanField(required=False) i just added this line as first step. :)

如果需要其他代码;你可以在下面评论

谢谢

1 个答案:

答案 0 :(得分:0)

将您的addForm转换为modelForm,然后在名为'_preview'的add.html模板中添加提交按钮(确保您的其他提交按钮名为'_save' )。代码看起来像这样:

class addForm(forms.ModelForm):
    class Meta:
        model = Post

@login_required(login_url='/login/')
def add_post(request):
    post = None
    template_name = 'add.html'
    if request.method == 'POST':
        form = addForm(request.POST)
        if form.is_valid():
          if '_preview' in request.POST:
              # don't save the post
              post = form.save(commit=False)
              template_name = 'preview.html'
          elif '_save' in request.POST:
              # save the post
              post = form.save()
              return HttpResponseRedirect('/admin/')
    else:
        form = addForm()
    return render_to_response(template_name, {'form': form, 'post': post}, context_instance=RequestContext(request))

你的模板底部会有类似的内容:

<input type='submit' name='_save' value='Save Post' />
<input type='submit' name='_preview' value='Preview Post' />

通过这种方式,您可以让用户预览他们的帖子而不将其保存到数据库 - 只需确保在preview.html上嵌入表单并包含一个保存按钮,以便他们可以保存如果他们喜欢他们看到的内容,请发布。