簡體   English   中英

使用HTML模板的Django表單

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM