[英]Django form using HTML template
我是Django的新手,我一直在尝试将此表单发送到POST。 我已经阅读了关于表单的文档,但是我对此感到有些困惑,因为如果我创建一个forms.py文件,我不确定如何实现Jquery日期选择器或下拉菜单。
我已经创建了模板,我可以访问它,并且它的格式完全符合我的要求,但是我无法锻炼如何将其发送到POST。 想法是采用表格中的数据并将其插入Postgres表中。
模板Submit.py
{% extends 'website/header.html' %}
{% block content %}
<p><b>Submit Job</b></p>
<form action="" method="post">
{% csrf_token %}
<b>Select Asset to transcode</b>
<p>Material ID:
<input type="text" name="material_id" size="30" value="" id="keyword"/>
</p>
<p>Profile:
<select name="workflow">
<option value="">Select a transcode Profile</option>
{% for i in object_list %}
<option value="{{ i.name }}">{{ i.name }}</option>
{% endfor %}
</select>
</p>
<script>
$(function() {
$( "#start_datepicker" ).datepicker({
dateFormat: 'dd-mm-yy'
});
});
</script>
<p>License Start Date: <input type="text" id="start_datepicker" name="start_date"></p>
<script>
$(function() {
$( "#end_datepicker" ).datepicker({
dateFormat: 'dd-mm-yy'
});
});
</script>
<p>License End Date: <input type="text" id="end_datepicker" name="end_date"></p>
<p>
<input type="submit" name="submit" />
</p>
</form>
{% endblock %}
Views.py
from django.shortcuts import render
def submit(request):
if request.method == 'POST':
material_id = request.POST['material_id']
workflow = request.POST['workflow']
start_date = request.POST['start_date']
end_date = request.POST['end_date']
return render(request, 'submit/submit.html')
else:
return render(request, 'submit/submit.html')
这是我得到的错误:
Method Not Allowed (POST): /submit/
[08/Feb/2017 17:28:49] "POST /submit/ HTTP/1.1" 405 0
我做错了什么?
编辑
以下是URL文件:
mysite url.py
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('website.urls')),
url(r'^submit/', include('submit.urls')),
url(r'^repo/', include('asset_db.urls')),
]
提交url.py
from django.conf.urls import url
from django.views.generic import ListView
from asset_db.models import Profiles
urlpatterns = [
url(r'^$', ListView.as_view(queryset=Profiles.objects.all().order_by("id"), template_name='submit/submit.html')),
]
检查您的urls.py文件是否具有类似内容
from django.conf.urls import patterns, url
urlpatterns = patterns('',
url(r'^submit/$', 'yourapp.views.submit'),
)
datepicker与该问题无关。 您最有可能发布到另一个视图。 检查所有网址和视图名称。
您正在为此列表使用ListView。 但是ListView只允许GET请求。 这就是为什么当它使用POST方法获取请求时的原因。 它给出了错误的方法不允许。 在您的views.py中为此URL创建一个视图,并定义get和post方法。
您没有映射到提交URL的视图。 / submit下唯一的URL是ListView。
如建议的那样,创建视图而不使用ListView解决了该问题。
更新了提交views.py
from django.shortcuts import render
from asset_db.models import Profiles
def submit(request):
profiles = Profiles.objects.order_by('-id')
context = {'profiles': profiles}
return render(request, 'submit/submit.html', context)
def success(request):
profiles = Profiles.objects.order_by('-id')
context = {'profiles': profiles}
return render(request, 'submit/success.html', context)
更新了模板Submit.html
{% extends 'website/header.html' %}
{% block content %}
<p><b>Submit Job</b></p>
<form action="{% url 'success' %}" method="post">
{% csrf_token %}
<b>Select Asset to transcode</b>
<p>Material ID:
<input type="text" name="material_id" size="30" value="" id="keyword"/>
</p>
<p>Profile:
<select name="workflow">
<option value="">Select a transcode Profile</option>
{% for i in profiles %}
<option value="{{ i.name }}">{{ i.name }}</option>
{% endfor %}
</select>
</p>
<script>
$(function() {
$( "#start_datepicker" ).datepicker({
dateFormat: 'dd-mm-yy'
});
});
</script>
<p>License Start Date: <input type="text" id="start_datepicker" name="start_date"></p>
<script>
$(function() {
$( "#end_datepicker" ).datepicker({
dateFormat: 'dd-mm-yy'
});
});
</script>
<p>License End Date: <input type="text" id="end_datepicker" name="end_date"></p>
<p>
<input type="submit" name="submit" />
</p>
</form>
{% endblock %}
网络服务器结果:
[09/Feb/2017 08:55:22] "GET /submit/ HTTP/1.1" 200 3300
[09/Feb/2017 08:55:29] "POST /submit/success/ HTTP/1.1" 200 2043
我使用Django教程第3部分获得有关创建上下文的帮助。 感谢您指出正确的方向!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.