Django视图没有正确重定向

时间:2016-11-11 11:27:50

标签: python django http

我在使用Django快捷方式渲染页面时遇到了一些困难。我的工作流程非常简单:

  1. 用户可以访问他们可以查看某些项目数据的页面(detail_project)
  2. 如果他们想要更新项目数据,他们应该单击一个按钮,该按钮将发送POST请求并加载update_project页面。此页面加载了当前项目数据。
  3. 用户更新并提交新数据。提交后,它们将返回到detail_project页面。
  4. 我的观点是这样的:

    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),但是当我提交它时(单击Submit按钮,我被重定向到详细项目页面而不输入if 'update_project_submit' in request.POST:语句。也许我的工作流程是错的。我无法理解。

    我打印了我的请求,我确实已经确认,当我提交表单时,我收到了对detail_project的POST请求。

    我有什么遗失的吗?或者我是否根据Django的逻辑尝试做错了什么?

1 个答案:

答案 0 :(得分:0)

使用

if request.POST.get('update_project_submit', False):

而不是

if 'update_project_submit' in request.POST:
相关问题