django - 创建预览页面

时间:2012-09-07 11:13:57

标签: django django-views

我的博客应用中有一个“添加帖子”页面。我想添加一个“预览页面”。我应该在保存帖子之前点击预览按钮。为了这 ;我在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'。

但我无法连接这些点。

谢谢

1 个答案:

答案 0 :(得分:1)

我以前的评论的解释

第一部分:创建页面模板通过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>
...

免责声明:代码未经过测试

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