2013-02-18 3 views
0

У меня есть форма с кнопкой POST Submit. Я хочу, чтобы ссылка на новую страницу при отправке формы и когда form.is_valid().Django - Ссылка на submit

Лучше ли ссылка на изображение или в шаблоне? Как это сделать?

view.py:

from django.shortcuts import render_to_response 
from ezmapping.models import * 
from django.forms.models import modelformset_factory 

def setName(request): 
    ezAppFormSet = modelformset_factory(ezApp, extra=1, fields=('name')) 
    formset = ezAppFormSet(queryset=ezApp.objects.none()) 
    if request.method == 'POST': 
     formset = ezAppFormSet(request.POST, request.FILES) 
     if formset.is_valid(): 
      formset.save() 
    return render_to_response("project/manage_new.html", {'formset': formset, 'title': "New"}, context_instance=RequestContext(request)) 

template.html

{% extends "basemap.html" %} 
{% block content %} 
<table border="1"> 
    <tr> 
    <td> 
    <h1>Define new App options</h1> 
    {% if formset.errors %} 
     <p style="color: red;"> 
      Please correct the error{{ formset.errors|pluralize }} below. 
     </p> 
    {% endif %} 
    <form method="post" action="." encrypt="multipart/form-data">{% csrf_token %} 
      {{ formset.as_p }} 
     <input type="submit" value="Submit"> 
    </form> 
</td> 
</tr> 
</table> 
{% endblock %} 
+0

Что значит 'когда form.is_valid()'? Вы хотите подтвердить форму на этой требуемой странице или хотите, чтобы страница, получившая перенаправление после успешной проверки на предыдущей странице? – sergzach

ответ

1

Вы можете использовать HttpResponseRedirect() в представлении, как это:

from django.shortcuts import render_to_response 
from ezmapping.models import * 
from django.forms.models import modelformset_factory 

def setName(request): 
    ezAppFormSet = modelformset_factory(ezApp, extra=1, fields=('name')) 
    formset = ezAppFormSet(queryset=ezApp.objects.none()) 
    if request.method == 'POST': 
     formset = ezAppFormSet(request.POST, request.FILES) 
     if formset.is_valid(): 
      formset.save() 
      next_link = u"/next/" 
      return HttpResponseRedirect(next_link) 

    return render_to_response("project/manage_new.html", {'formset': formset, 'title': "New"}, context_instance=RequestContext(request)) 
0

Конечно. Просто вернуть render_to_response внутри вашей условной для request.method == 'POST', или необязательно, просто создать контекст и шаблон как переменные руки в render_to_response как таковой:

перефразировать:

def foo(request): 
    template = 'template1.html' 
    # form and formsets here set into `context` as a dictionary 

    if request.method == 'POST': 
     template = 'template2.html' 

    return render_to_response(template, context) 

[EDIT]

Когда я перечитаю ваш вопрос, если вы хотите перенаправить на другое представление, если ваша форма верна, верните вместо этого HttpResponseRedirect.

0

Если я правильно понял ваш вопрос.

Ваше мнение:

from django.shortcuts import render_to_response 
from ezmapping.models import * 
from django.forms.models import modelformset_factory 

def setName(request): 
    ezAppFormSet = modelformset_factory(ezApp, extra=1, fields=('name')) 
    formset = ezAppFormSet(queryset=ezApp.objects.none()) 
    if request.method == 'POST': 
     formset = ezAppFormSet(request.POST, request.FILES) 
     if formset.is_valid(): 
      formset.save() 
      submit_link = True # 2* 
     else: 
      submit_link = False 
    return render_to_response("project/manage_new.html", {'submit_link': submit_link, 'formset': formset, 'title': "New"}, context_instance=RequestContext(request)) 

Шаблон:

{% extends "basemap.html" %} 
{% block content %} 
<table border="1"> 
    <tr> 
    <td> 
    <h1>Define new App options</h1> 
    {% if formset.errors %} 
     <p style="color: red;"> 
      Please correct the error{{ formset.errors|pluralize }} below. 
     </p> 
    {% endif %} 
    <form method="post" action="." encrypt="multipart/form-data">{% csrf_token %} 
      {{ formset.as_p }} 
     <input type="submit" value="Submit"> 
    </form> 

    {% if submit_link %} 
     <a href='/next/'>Data is saved, let's continue.</a> 
    {% endif %} 
</td> 
</tr> 
</table> 
{% endblock %} 

Update.

И да, если вы хотите перенаправить (не показывать следующую ссылку ) просто место:

from django.shortcuts import redirect 
... 
return redirect('you-url') 

Вместо 2 *.

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