2

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

我被困住了。我无法在我的脑海中为此创建算法。有一个 page.one 表格。一个视图(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. :)

如果需要另一个代码;你可以在下面评论

谢谢你

4

1 回答 1

1

将您的转换addFormmodelForm,然后在add.html模板中添加一个名为“_preview”的提交按钮(确保您的另一个提交按钮名为“_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,您嵌入了表单并包含一个保存按钮,以便他们可以在他们喜欢他们看到的内容时保存帖子。

于 2012-09-14T15:52:01.627 回答