У меня возникли трудности с отображением страниц с ярлыками Django. Мой рабочий довольно прост:Просмотр Django не перенаправляется должным образом
- Пользователи перейти на страницу, где они могут просматривать некоторые данные проекта (detail_project)
- Если они хотят, чтобы обновить данные проекта, они должны нажать на кнопку, которая будет посылать запрос POST и загружает страницу обновления_проекта. Эта страница загружается с текущими данными проекта.
- Пользователи обновляют и представляют новые данные. После отправки они возвращаются на страницу 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.
есть ли что-то мне не хватает? Или я Я пытаюсь сделать что-то неправильно в соответствии с логикой Джанго?
почему вы не используете Джанго формы и стандартный рецепт? – e4c5
@ e4c5, Ну, я использую формы джанго. Что вы подразумеваете под «стандартным рецептом»? – revy
вы знаете, создайте форму с postdata для сообщения, без нее для получения, визуализируйте ту же форму, если она недействительна и т. Д. Ваш код, похоже, не соответствует этому шаблону – e4c5