2016-11-11 5 views
0

У меня возникли трудности с отображением страниц с ярлыками Django. Мой рабочий довольно прост:Просмотр Django не перенаправляется должным образом

  1. Пользователи перейти на страницу, где они могут просматривать некоторые данные проекта (detail_project)
  2. Если они хотят, чтобы обновить данные проекта, они должны нажать на кнопку, которая будет посылать запрос POST и загружает страницу обновления_проекта. Эта страница загружается с текущими данными проекта.
  3. Пользователи обновляют и представляют новые данные. После отправки они возвращаются на страницу 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> 

[Update]

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.

есть ли что-то мне не хватает? Или я Я пытаюсь сделать что-то неправильно в соответствии с логикой Джанго?

+0

почему вы не используете Джанго формы и стандартный рецепт? – e4c5

+0

@ e4c5, Ну, я использую формы джанго. Что вы подразумеваете под «стандартным рецептом»? – revy

+0

вы знаете, создайте форму с postdata для сообщения, без нее для получения, визуализируйте ту же форму, если она недействительна и т. Д. Ваш код, похоже, не соответствует этому шаблону – e4c5

ответ

0

Использование

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

вместо

if 'update_project_submit' in request.POST: 
+0

Я сделал это, и ничего не изменилось. – revy

+0

Форма не отправляет 'update_project_submit' в качестве поля сообщения. Проверьте с помощью возврата HttpResponse (request.POST). – vikasmcajnu

Смежные вопросы