2012-09-14 13 views
1

我有一個附加頁面來創建新的post.and我想添加一個鏈接(AHREF)預覽此刻的崗位。我有一個表單和一個提交按鈕來保存帖子到數據庫。我應該使用相同的表單預覽。當我點擊「預覽」鏈接的頁面必須重定向到「preview.html」,我可以在顯示形式的值。Django的 - 如何創建一個預覽視圖

我被困。在我看來,我無法爲此創造出這樣的解釋。有一個page.one形式。一個視圖(addPost)。我需要通過另一個具有另一個模板文件的視圖來達到這個表單的值。

和我在模型PY兩個領域,被稱爲「titlepreview」和「bodyPreview」。在預覽頁面中查看錶單的值;形式數據應該寫入這兩個領域。

這裏的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. :) 

如果另一個代碼需要;你可以發表評論下面

謝謝

+0

我更新的帖子。增加models.py – alix

+0

是正確保存後?如果是,只需將用戶重定向到preview.html並從db顯示數據? – wasimbhalli

+0

當我點擊預覽鏈接;它必須通過使用jQuery(無頁面刷新)保存DATAS這兩個預覽字段(titlepreview和bodypreview),然後重定向到preview.html – alix

回答

0

將您addFormmodelForm,然後添加一個提交按鈕,您的add.html模板名稱爲「_preview」(請確保您的其他提交按鈕被命名爲「_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,你嵌入形式,包括保存按鈕,使他們能夠保存後,如果他們喜歡他們所看到的。

+0

它什麼都不做。沒有錯誤。我只是寫你說的代碼。它不保存並不預覽。 :/ – alix

+0

哎呀 - 我錯過了'POST'塊中的'form ='行。再試一次。 – girasquid

+0

哦,忘了問..網址呢?我忘了設置網址。我想這就是因爲它什麼都不做。仍然。 – alix