2014-02-11 7 views
0

У меня есть форму для просмотра продуктов. Чтобы просмотреть продукт, я создаю форму, но когда пользователь отправляет свой отзыв, я хочу, чтобы он остался на той же странице.Django form submit and not change page

Это мой URL:

url(r'^(?P<slug>[^/]+)/$', 'reviews.views.single_product'), 

и это моя форма

<form class = "form-inline" action = "/text/" method="post">{% csrf_token %} 
<strong><h3>Revise este produto</h3></strong><br> 

{% for field in form %} 

<font size = "4"> 

{% if field.field.required %} 
<div class="field-wrapper question-required"> 
{{ field.errors }} 
<span class="asterix"> * </span><label class="label-inline">{{ field.label }}</label> 
{% else %} 
<div class="field-wrapper"> 
{{ field.errors }} 
<label class="form-help-text">{{ field.label }}</label> 
{% endif %} 
<br /> 

<div class=""> 
{{ field }} 
</div> 

</div> 
</li> 
</font> 

{% endfor %} 
<br> 
<button class="btn btn-primary" type="submit" name="submit" value = "Envia Review"><h4>Pronto!</h4></button> 
</form> 

Это мнение, что отображает страницу:

def single_product(request, slug): 
    product = get_object_or_404(Product, slug=slug) 
    prod = Product.objects.get(slug=slug) 
    reviews = Review.objects.get(product=prod.id) 
    reviewmatrix = {} 
    i = 0 
    try: 
     for rev in reviews: 
      reviewmatrix[str(i)] = [[review.review_text]] 
      u = User.objects.get(username=rev.user) 
      i = i + 1 
    except: 
     u = User.objects.get(username=reviews.user) 
     reviewmatrix[str(i)] = [[reviews.review_text]] 

    if request.method=="POST": 
     form = responseForm(request.POST, review=review) 
     if form.is_valid(): 
      response = form.save() 
      msg = 'Obrigado por avaliar ' + prod.name 
     return render(request, 'product_detail.html', {'prod':prod, 'reviews':reviews, 'user':u.first_name, 'msg':msg})  
    else:  
     form = ReviewForm()  
     args = {} 
     args.update(csrf(request)) 
    return render(request, 'product_detail.html', {'prod':prod, 'reviews':reviews, 'user':u.first_name, 'form':form}) 
+0

Это будет сделано в представлении, где вы обрабатываете форму. – Rohan

ответ

2

Вы можете сделать HttpResponseRedirect к тот же вид, как только вы обрабатываете форму. Вы должны иметь возможность идентифицировать слизень из полей в форме.

Кроме того, вы можете отправить форму в ту же точку зрения, используя action = ".", и вы можете избежать перенаправления на исходную страницу.

+0

ОК, у меня появилась идея, но я не понял, как это реализовать. Можете ли вы указать, пожалуйста? Спасибо за помощь. –

+0

Укажите код представления, который обрабатывает форму, то есть URL '/ text /'. – arocks

+0

Хорошо, я уже добавил. Посмотрите пожалуйста –