django-如何创建预览视图
我有一个添加页面来创建一篇新文章。我现在想添加一个链接(ahref)来预览这篇文章。我有一个表单和一个提交按钮将帖子保存到db中。我应该使用相同的表单进行预览。当我点击“预览”链接时,页面必须重定向到“preview.html”,我可以在其中显示表单的值 我被卡住了。在我的脑海中,我无法为这个问题创建算法。有一页,一张表格。一个视图(addPost)。我需要通过另一个视图获得这个表单的值,这个视图有另一个模板文件 我在模型py中有两个字段,叫做“标题预览”和“正文预览”。在预览页面中查看表单的值;表单数据应该写入这两个字段 这里是models.py:django-如何创建预览视图,django,django-forms,django-views,Django,Django Forms,Django Views,我有一个添加页面来创建一篇新文章。我现在想添加一个链接(ahref)来预览这篇文章。我有一个表单和一个提交按钮将帖子保存到db中。我应该使用相同的表单进行预览。当我点击“预览”链接时,页面必须重定向到“preview.html”,我可以在其中显示表单的值 我被卡住了。在我的脑海中,我无法为这个问题创建算法。有一页,一张表格。一个视图(addPost)。我需要通过另一个视图获得这个表单的值,这个视图有另一个模板文件 我在模型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)
以下是我的添加帖子视图:
@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))
我的地址表:
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. :)
如果需要另一个代码;你可以在下面发表评论
谢谢将您的
addForm
转换为modelForm
,然后向您的add.html
模板添加一个名为“\u preview”的提交按钮(确保另一个提交按钮名为“\u 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
上嵌入表单并包含一个保存按钮,这样,如果他们喜欢看到的内容,就可以保存帖子。我更新了帖子。添加的models.pypost是否正确保存?如果是,只需将用户重定向到preview.html,并在单击preview链接时显示db?中的数据;它必须使用jquery(无页面刷新)将数据保存到这两个预览字段(titlepreview和bodypreview),然后重定向到preview.htmlit不执行任何操作。没有错误。我只是写了你说的代码。它不保存也不预览:/哎呀-我错过了POST
块中的form=
行。再试一次。哦,忘了问了。。URL呢?我忘了设置URL。我想这就是为什么它什么都不做。尽管如此,无论您发送到add\u post
视图的是什么,都可以很好地实现这一点。确保您的表单正在过帐到“”。第二个过帐变量看起来是灰色的。遥不可及。post=form.save()