2

新しい投稿を作成するための追加ページがあり、現時点で投稿をプレビューするためのリンク (ahref) を追加したいと考えています。投稿をデータベースに保存するためのフォームと送信ボタンが 1 つあります。プレビューには同じフォームを使用する必要があります。「プレビュー」リンクをクリックすると、フォームの値を表示できる「preview.html」にページをリダイレクトする必要があります。

ハマった。このためのアルゴリズムを頭の中で作成することはできません。1 つのページと 1 つのフォームがあります。1 つのビュー (addPost) 。別のテンプレート ファイルを持つ別のビューで、このフォームの値に到達する必要があります。

モデル py には、「titlepreview」と「bodyPreview」という 2 つのフィールドがあります。プレビュー ページでフォームの値を表示します。フォーム データは、これら 2 つのフィールドに書き込む必要があります。

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

をに変換してaddFormから、テンプレートに「_preview」という名前のmodelForm送信ボタンを追加しますadd.html(他の送信ボタンの名前が「_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 に答える