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

sha*_*r90 5 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,我得到一个页面未找到错误

我的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})
Run Code Online (Sandbox Code Playgroud)

我的urls.py

from django.conf.urls.defaults import patterns, include, url

urlpatterns = patterns('product.views',
    url(r'^$', 'index'),                       
    url(r'^add_product/$', 'add_product'),
)
Run Code Online (Sandbox Code Playgroud)

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

Par*_*ngh 9

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

from django.http import HttpResponseRedirect

def add_product(request)
    ...........................
    ...........................
    return HttpResponseRedirect('/')
Run Code Online (Sandbox Code Playgroud)

它将重定向到索引页面.还尝试给出url名称,以便您可以使用reverse而不是'/'

谢谢


Ala*_*air 5

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

而不是相对网址,

<form method="post" action="add_product">
Run Code Online (Sandbox Code Playgroud)

该操作应具有绝对网址:

<form method="post" action="/product/add_product">
Run Code Online (Sandbox Code Playgroud)

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

{% load url from future %}
<form method="post" action="{% url 'add_product' %}">
Run Code Online (Sandbox Code Playgroud)

上面的代码段通过加载新的 url 标记使用新的 url 语法。

  • 您只能在堆栈溢出时选择一个答案,但在您的代码中,您可以同时使用这两个答案!成功更新后重定向是一个好主意——它可以防止用户意外刷新并多次提交相同的数据。使用 `url` 标签也是一种很好的做法。 (3认同)