Django 表单提交重定向到错误 url
Django form submission redirecting to wrong url
我正在尝试从 this 教程和我自己的东西中寻求帮助。它应该是一个市场。
我有一个名为 Creator(供应商)的应用程序
- 我正在尝试让用户自己添加新产品
views.add_product
、add_product.html
和 forms.py
当我尝试提交 add_product
表单时,出现此错误
错误
Page not found (404) Request Method: POST Request URL: http://127.0.0.1:8000/creator/
(我不是想将其重定向到此页面,而是 'url 'creator_overview''
项目的urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('core.urls')),
path('creator/', include('creator.urls')),
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
creator/urls.py
urlpatterns = [
path('sell_on_cosloo/', sell_great_things, name='creator_signup'),
path('creator_overview/',creator_overview , name='creator_overview'),
path('add_product/',add_product , name='add_product'),
...
]
creator/views.py
@login_required
def add_product(request):
if request.method == 'POST':
form = ProductForm(request.POST, request.FILES)
if form.is_valid():
product = form.save(commit=False)
product.creator = request.user.creator
product.slug = slugify(product.title)
product.save()
return redirect('creator_overview')
else:
form = ProductForm()
return render(request, 'creator/add_product.html', {'form': form})
creator/forms.py
<form method="post" action="." enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<div class="field">
<div class="control">
<button class="button is-dark is-uppercase">Submit</button>
</div>
</div>
</form>
add_product.html
{% extends 'core/base.html' %} {% block title %}Add product | {% endblock %} {%
block content %}
<h1 class="title">Add product</h1>
<form method="post" action="." enctype="multipart/form-data">
{% csrf_token %} {{ form.as_p }}
<div class="field">
<div class="control">
<button class="button is-dark is-uppercase">Submit</button>
</div>
</div>
</form>
{% endblock %}
和平!! :))
编辑:好的,快速更新:我认为它与图像有关,我从表单中删除了图像字段,现在它似乎可以正常工作
问题出在表单中的 action 属性。
而不是:
<form method="post" action="." enctype="multipart/form-data">
这里的表单将尝试在 http://127.0.0.1:8000/creator/ url 提交,这是不正确的
试试这个:
<form method="post" action="{% url 'add_product' %}" enctype="multipart/form-data">
正确的 url 是 http://127.0.0.1:8000/creator/add_product/ creator/urls.py 文件
我正在尝试从 this 教程和我自己的东西中寻求帮助。它应该是一个市场。
我有一个名为 Creator(供应商)的应用程序
- 我正在尝试让用户自己添加新产品
views.add_product
、add_product.html
和forms.py
当我尝试提交 add_product
表单时,出现此错误
错误
Page not found (404) Request Method: POST Request URL: http://127.0.0.1:8000/creator/
(我不是想将其重定向到此页面,而是 'url 'creator_overview''
项目的urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('core.urls')),
path('creator/', include('creator.urls')),
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
creator/urls.py
urlpatterns = [
path('sell_on_cosloo/', sell_great_things, name='creator_signup'),
path('creator_overview/',creator_overview , name='creator_overview'),
path('add_product/',add_product , name='add_product'),
...
]
creator/views.py
@login_required
def add_product(request):
if request.method == 'POST':
form = ProductForm(request.POST, request.FILES)
if form.is_valid():
product = form.save(commit=False)
product.creator = request.user.creator
product.slug = slugify(product.title)
product.save()
return redirect('creator_overview')
else:
form = ProductForm()
return render(request, 'creator/add_product.html', {'form': form})
creator/forms.py
<form method="post" action="." enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<div class="field">
<div class="control">
<button class="button is-dark is-uppercase">Submit</button>
</div>
</div>
</form>
add_product.html
{% extends 'core/base.html' %} {% block title %}Add product | {% endblock %} {%
block content %}
<h1 class="title">Add product</h1>
<form method="post" action="." enctype="multipart/form-data">
{% csrf_token %} {{ form.as_p }}
<div class="field">
<div class="control">
<button class="button is-dark is-uppercase">Submit</button>
</div>
</div>
</form>
{% endblock %}
和平!! :))
编辑:好的,快速更新:我认为它与图像有关,我从表单中删除了图像字段,现在它似乎可以正常工作
问题出在表单中的 action 属性。
而不是:
<form method="post" action="." enctype="multipart/form-data">
这里的表单将尝试在 http://127.0.0.1:8000/creator/ url 提交,这是不正确的
试试这个:
<form method="post" action="{% url 'add_product' %}" enctype="multipart/form-data">
正确的 url 是 http://127.0.0.1:8000/creator/add_product/ creator/urls.py 文件