2

ブログ アプリに「投稿を追加」ページがあります。「プレビューページ」を追加したい。投稿を保存する前でも、プレビュー ボタンをクリックする必要があります。このため ; 私は、models.py に titlePreview と bodyPreview という 2 つの新しいフィールドを作成しました。

私がやっていることは、フォーム データをこれら 2 つのフィールドに保存して、公開する前にページをプレビューすることです。

しかし、私はそれができませんでした。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})

addpost.html から「preview.html」にリダイレクトする必要がある「preview_view」のような別のビューを作成する必要があると思います。

しかし、ポイントを接続できませんでした。

ありがとうございました

4

1 に答える 1

0

以前のコメントの説明

最初の部分:ページテンプレートの作成は、ブログ投稿データを経由して渡しますPOST

この部分はさまざまな方法で実装できます。これは次の形式の 1 つです。

<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>

2 番目の部分: ビュー 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 に答える