页面未在 django 中保存表单数据
Posted
技术标签:
【中文标题】页面未在 django 中保存表单数据【英文标题】:Page not save forms data in django 【发布时间】:2014-11-22 15:38:48 【问题描述】:我正在尝试使用 django 进行探戈练习 7,我必须通过向表单添加信息来将新页面保存到特定类别。
所以我在 forms.py 中编写了新代码
class PageForm(forms.ModelForm):
title = forms.CharField(max_length=128, help_text="Please enter the title of the page.")
url = forms.CharField(max_length=200, help_text="Please enter the url of the page.")
views = forms.IntegerField(widget=forms.HiddenInput(), initial=0)
class Meta:
model = Page
def clean(self):
cleaned_data = self.cleaned_data
url = cleaned_data.get('url')
if url and not url.startswith('http//'):
url = 'http://' + url
cleaned_data['url'] = url
return cleaned_data
fields = ('title', 'url', 'views')
def save_form(self):
if self.is_valid():
page = self.save(commit=False)
try:
cat = Category.objects.get(name=category_name)
page.category = cat
except:
return render_to_response('rango/add_category.html', , context)
page.views = 0
page.save()
return True
else:
return False
然后我编辑views.py
def add_page(request, category_name_url):
context = RequestContext(request)
category_name = decode_url(category_name_url)
if request.method == 'POST':
form = PageForm(request.POST)
if form.save_form():
return category(request, category_name_url)
else:
print form.errors
else:
form = PageForm()
return render_to_response( 'rango/add_page.html',
'category_name_url': category_name_url,
'category_name': category_name,
'form': form,
context)
def decode_url(element):
return element.replace(' ', '_')
def encode_url(element):
return element.replace('_', '')
然后我创建了模板:
兰戈
<body> <h1>Add page to category</h1> <form id="page_form" method="post" action="/"> % csrf_token % % for hidden in forms.hidden_fields % hidden % endfor % % for field in form.visible_fields % field.errors field.help_text field % endfor % <input type="submit" name="Submit" value="Add a page" /> </form> </body> </html>
我在 category.html 中引用了新页面
<a href="/rango/category/ category_name_url /add_page/">Add page to this category</a>
当然还有编辑 urls.py
> url(r'^rango/category/(?P<category_name_url>\w+)/add_page/$',
> views.add_page, name='add_page'),
一切都是可见的,我可以填写表格。但是当我通过单击按钮确认数据时,页面返回主页而不是类别,并且新页面未保存在数据库中。所以请某人,哪里有错误?
【问题讨论】:
【参考方案1】:您的<form>
元素的操作设置为action="/"
。这使得表单提交向主页而不是当前页面发送 POST 请求。您可以通过将表单操作设为空 action=""
以提交到当前 URL 或明确并使用 % url %
模板标记来进行所需的表单操作来纠正此问题。
【讨论】:
感谢马克的回复。我尝试了您的建议,现在提交数据后,我留在了 add_page 页面上,但没有什么需要保存 :-( 所以我必须有更多错误代码 :-(以上是关于页面未在 django 中保存表单数据的主要内容,如果未能解决你的问题,请参考以下文章