在django中提交表单后重定向到索引页面

时间:2012-10-01 10:37:25

标签: python django

除了在添加产品数据后重定向回索引页面之外,一切正常工作,目前在我的数据保存后,它会被重定向到 127.0.0.1:8000/product/add_product/add_product

目前,当我的索引页面(add_product.html)加载时,我有一个从数据库中呈现数据的表,

  1. 首先我的网址看起来像>> 127.0.0.1:8000/product /
  2. 然后,一旦我点击添加按钮,网址就会变为 127.0.0.1:8000/product/add_product / ,没问题,但是
  3. 当我尝试再次添加数据时,我的网址转到 127.0.0.1:8000/product/add_product/add_product ,我收到了网页未找到错误
  4. 我的views.py

    from models import Product,Category
    from django.shortcuts import render_to_response,get_object_or_404
    from django.http import HttpResponseRedirect
    
    def index(request):
        category_list = Category.objects.all()
        product_list = Product.objects.all()
        return render_to_response('product/add_product.html', {'category_list': category_list, 'product_list':product_list})
    
    def add_product(request):
        post = request.POST.copy()
    
        category = Category.objects.get(name=post['category'])
        product = post['product']
        quantity = post['quantity']
        price = post['price']
    
        new_product = Product(category = category, product = product, quantity = quantity, price = price )
        new_product.save()
        category_list = Category.objects.all()
        product_list = Product.objects.all()
        return render_to_response('product/add_product.html', {'category_list': category_list, 'product_list':product_list})
    

    我的urls.py

    from django.conf.urls.defaults import patterns, include, url
    
    urlpatterns = patterns('product.views',
        url(r'^$', 'index'),                       
        url(r'^add_product/$', 'add_product'),
    )
    

    如何将URL指向我的索引页面(add_product.html)?

2 个答案:

答案 0 :(得分:7)

127.0.0.1:8000/product/add_product / 的视图中返回

from django.http import HttpResponseRedirect

def add_product(request)
    ...........................
    ...........................
    return HttpResponseRedirect('/')

它将重定向到索引页面。 同时尝试提供网址名称,以便您可以使用反向代替“/”

由于

答案 1 :(得分:3)

您可能在模板中错误地设置了表单action

而不是相对网址,

<form method="post" action="add_product">

动作应该有绝对的URL:

<form method="post" action="/product/add_product">

作为改进,您可以使用url模板标记,这样您就不需要对模板中的网址进行硬编码。

{% load url from future %}
<form method="post" action="{% url 'add_product' %}">

上面的代码段使用新的网址语法,方法是加载新的网址标记。