首页 > 解决方案 > Django:表单在索引中有效,但在特定页面中无效

问题描述

我的网站周围有多种表格。

但是,有一个在主页(index.html)中工作的特定表单,但是当在我网站的某个部分处理这个特定表单时,它不再起作用(在这个部分,如果我回到家一切正常正如预期的那样)。

我错过了什么?

视图.py:

from django.shortcuts import render, HttpResponse, HttpResponseRedirect
from .models import Treasure, TamaniosCantidades
from .forms import TreasureForm, TamaniosCantidadesForm, LoginForm
from django.contrib.auth import authenticate, login, logout


# Create your views here.

def index(request):
    treasures = Treasure.objects.all()
    form = TreasureForm()
    tamanioscantidades_form = TamaniosCantidadesForm()
    return render(request, 'main_app/index.html', {'treasures': treasures,
                                                   'form': form,
                                                   'tamanioscantidades_form': tamanioscantidades_form})


def productos(request):
    treasures = Treasure.objects.all()
    form = TreasureForm()
    return render(request, 'main_app/productos.html', {'treasures': treasures,
                                                       'form': form})


def die_cut(request):
    tamanioscantidades_form = TamaniosCantidadesForm()
    return render(request, 'main_app/die-cut-stickers.html', {'tamanioscantidades_form': tamanioscantidades_form})


def post_tamanioscantidades(request):
    form = TamaniosCantidadesForm(request.POST)
    if form.is_valid():
        tamanioscantidades = TamaniosCantidades(tamanios=form.cleaned_data['tamanios'],
                            cantidades=form.cleaned_data['cantidades'])
        # tamanioscantidades = tamanioscantidades_form.save(commit = False)
        # tamanioscantidades.usuario = request.user
        tamanioscantidades.save()

    return HttpResponseRedirect('/')


def post_treasure(request):
    form = TreasureForm(request.POST)
    if form.is_valid():
        treasure = Treasure(name=form.cleaned_data['name'],
                            value=form.cleaned_data['value'])

        treasure.save()

    return HttpResponseRedirect('/')

urls.py

app_name = 'main_app'
urlpatterns = [
    path('', views.index),
    path('productos/', views.productos),
    path('productos/die-cut-stickers', views.die_cut, name='die-cut-stickers'),
    path('post_url/', views.post_treasure, name='post_treasure'),
    path('post_url_tamanioscantidades/', views.post_tamanioscantidades, name='post_tamanioscantidades'),
]

*html**:

<div class="col-md-6 border border-primary rounded border-3">

                    <div class="m-5">

                        <div class="row">
                            <form action="post_url_tamanioscantidades/" method="post">
                                {% csrf_token %}
                                {{ tamanioscantidades_form.as_p }}
                                <input type="submit" value="Submit"/>
                            </form>

                    </div>


                </div>

正如我所说,这个表单可以在家里工作,但是在我网站的某个部分中处理相同的代码时,提交按钮不会将表单保存在数据库中。

它返回:

Page not found (404)
Request Method: POST
Request URL:    http://127.0.0.1:8000/productos/post_url_tamanioscantidades/
Using the URLconf defined in gallito.urls, Django tried these URL patterns, in this order:

admin/
productos/
productos/die-cut-stickers [name='die-cut-stickers']
post_url/ [name='post_treasure']
post_url_tamanioscantidades/ [name='post_tamanioscantidades']
accounts/
The current path, productos/post_url_tamanioscantidades/, didn't match any of these.

标签: django

解决方案


问题是正在提交的表单http://127.0.0.1:8000/productos/post_url_tamanioscantidades/不存在,而是您希望它提交http://127.0.0.1:8000/post_url_tamanioscantidades/

所以在你的表单html中开始表单操作/

<form action="/post_url_tamanioscantidades/" method="post">

推荐阅读