【问题标题】:django - creating a preview pagedjango - 创建一个预览页面
【发布时间】:2012-09-01 06:31:33
【问题描述】:

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

但我无法连接点。

谢谢

【问题讨论】:

  • 也许这很愚蠢,但是...如果您只是通过 POST 将所需的数据传递给preview_view 会怎样?这样您就不需要在数据库中保存任何内容。
  • 我该怎么做?你能再具体一点吗?
  • 在“创建页面”模板中,当您单击预览按钮时,您通过 POST 发送数据,就好像它是一个表单一样。它将是preview_view URL 的操作,此视图将从 POST 获取参数。然后在视图中,您可以调用博客文章模板或任何具有适当数据的内容。
  • 我理解你。但我不能在代码中做到这一点。有2个意见。如何从另一个视图获取视图的表单数据?像 request.Post.title 和 request.POST.body ?如果是 ;然后?抱歉,如果你用代码解释它会很棒:)

标签: django django-views


【解决方案1】:

我以前的cmets的解释

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

免责声明:代码根本未经测试

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

【讨论】:

  • 当我这样做时,它可以工作,但在 preview.html 中似乎没有。当我单击预览按钮时;它只是重定向到 preview.html。没有数据。如何从模板文件中调用数据?在 preview.html
  • 在示例中,我将 request.POST 作为模板上下文传递,因此在您的模板中,变量名称必须与隐藏表单字段的名称相同。
  • 它没有用。没有错误。但没有工作。我现在需要出去。感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 2021-03-15
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多