我在使用Django快捷方式呈现页面时遇到了一些困难。我的工作流程非常简单:Django视图不能正确重定向
- 用户进入一个页面,在这里他们可以查看某些项目数据(detail_project)
- 如果他们想更新项目数据,他们应该点击一个按钮,将发送POST请求,加载update_project页面。此页面将加载当前的项目数据。
- 用户更新并提交新数据。提交后,它们返回到detail_project页面。
我的看法是这样的:
def update_project(request):
if request.method == 'POST':
if 'update_project_submit' in request.POST:
# updates project with form data and returns to detail project page
return redirect('detail_project', project_name=project_name)
else:
# loads project original data into the form
return render(request, 'project/update_project.html', context)
def detail_project(request, project_name):
if request.method == 'POST':
if 'update_project' in request.POST:
return update_project(request)
else:
# does another stuff
else:
# shows project details
return render(request, 'project/detail_project.html', context)
urls.py:
url(r'^project/update/$', views.update_project, name='update_project'),
url(r'^project/details/(?P<project_name>[a-zA-Z][a-zA-Z0-9-_]+)/$', views.detail_project, name='detail_project'),
而且update_project.html:
<form class="form-horizontal" role="form" action="" method="post">
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<div class="col-sm-3">
<label for="{{ field.id_for_label }}" class="control-label">{{ field.label }}</label>
</div>
<div class="col-sm-9">
{{field}}
</div>
<div class="col-sm-12">
{{ field.help_text }}
</div>
</div>
{{field.non_field_errors }}
{{field.errors}}
{% endfor %}
<button type="submit" name="update_project_submit" class="btn btn-primary">Submit</button>
</form>
[更新]
Forms.py
class UpdateProjectForm(forms.Form):
project_name_validator = RegexValidator(r'^[a-zA-Z][a-zA-Z0-9-_]{1,31}$', constants.PROJECT_NAME_INVALID)
project_name = forms.CharField(required=True, widget=forms.TextInput(attrs={'required': 'true'}), validators=[project_name_validator])
project_description = forms.CharField(required=True, widget=forms.Textarea(attrs={'style':'resize:none;', 'required': 'true'}))
project_expiration = forms.DateField(required=False, widget=forms.TextInput(attrs={'class':'datepicker'}))
def __init__(self, *args, **kwargs):
super(UpdateProjectForm, self).__init__(*args, **kwargs)
self.fields['project_name'].label = "Project Name:"
self.fields['project_description'].label = "Project Description:"
self.fields['project_expiration'].label = "Expiration Date:"
的问题是,我不能更新我的项目。我的页面正确加载表单(update_project)和当前数据(步骤2),但是当我提交它时(单击提交按钮,我将被重定向到详细项目页面而不输入if 'update_project_submit' in request.POST:
声明。也许我的工作流程是错误的。不能看着办吧。
我印我的请求,我真的cofirmed,当我提交表单,我收到一个POST请求detail_project。
有我丢失的东西?还是我我试图根据Django的逻辑做错事?
你为什么不使用Django的形式和标准的配方? – e4c5
@ e4c5,那么,我正在使用django表单。 “标准配方”是什么意思? – revy
你知道,创建一个postdata为一个职位的表格,没有它获得,呈现相同的形式,如果无效等您的代码似乎并不遵循该模式 – e4c5