2

我的博客应用中有一个“添加帖子”页面。我想添加一个“预览页面”。我应该在保存帖子之前点击预览按钮。为了这 ; 我在我的 models.py 中创建了两个新字段:titlePreview 和 bodyPreview。

我正在做的是将表单数据保存到这两个字段中以在发布前预览页面。

但我不能那样做。我有一个 addPost 视图。这里是 :

@login_required(login_url='/panel')
def addpost(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(request,'add.html',{'form':form,})

这是我的models.py:

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

    def __unicode__(self):
        return self.title

    @permalink
    def get_absolute_url(self):
        return ('view_blog_post',None, {'postslug':self.slug})

现在我想我应该创建一个不同的视图,比如“preview_view”,它必须从 addpost.html 重定向到“preview.html”。

但我无法连接点。

谢谢你

4

1 回答 1

0

解释我之前的评论

第一部分:创建页面模板通过POST

这部分可以通过多种方式实现,这是一种形式:

<form action={% url "preview_page" %} method="POST">
    <input type="hidden" name="title" value="{{ post_title }}">
    <input type="hidden" name="body" value="{{ post_body }}">
    <input type="submit" name="preview_button" value="preview">
</form>

第二部分:创建视图 preview_page

@login_required(login_url='/panel')
def previewpost(request):
    if request.method=="POST":
        # Here pass the POST data to the template, POST is already a dict,
        # so it may be can fit directly into the template if names match
        # though it is always better to check the values first
        return render(request,'post_template.html', request.POST)
    else:
        ...

post_template.html

...
<h1>{{ title }}</h1>
<p>{{ body }}</p>
...

免责声明:代码根本没有经过测试

此解决方案的缺点是您必须将数据(标题、正文)再次从客户端传递到服务器。我希望这对你有用。

于 2012-09-07T11:55:51.363 回答