我有一个添加页面来创建一个新帖子。我想添加一个链接(ahref)来预览帖子。我有一个表单和一个提交按钮将帖子保存到数据库中。我应该使用相同的表格进行预览。当我点击“预览”链接时,页面必须重定向到'preview.html',我可以在其中显示表单的值。
我被卡住了。我无法在脑海中为此创造算法。有一页。一个表格。一个视图(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 :(得分:0)
将您的addForm
转换为modelForm
,然后在名为'_preview'的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
上嵌入表单并包含一个保存按钮,以便他们可以保存如果他们喜欢他们看到的内容,请发布。