如何在Django中提交带有href的表单?

时间:2014-12-16 02:08:50

标签: python django

我有一个链接,点击后,应通过帖子请求提交包含不可见字段的表单。然后,我应该能够获得如下字段值:

var = request.POST.get('name_of_var', '')

看了几篇文章之后,我似乎无法让它发挥作用。这就是我到目前为止所做的:

<form id="form-id" method="post">
    <li> 
        <input type="hidden" value="{{ obj }}" name="name_of_var">
        <a href="/activities" onclick="document.getElementById('form-id').submit();"> {{obj}} </a>
    </li>
</form>

在我看来,我有类似的东西,但永远不会触发POST请求。这可能是什么问题?:

if request.POST:
        var = request.POST.get('name_of_var', '')
        return render_to_response('activities/display_activities.html', var)

编辑:这是我的views.py:

def index(request):
    if request.method == "POST":
        var = request.POST.get('name_of_var', '')
        return render_to_response('activities/display_activities.html', var)

    category1 = Service.objects.filter(category = 'Sports')
    category2 = Service.objects.filter(category = 'Dance')
    category3 = Service.objects.filter(category = 'Music')
    category4 = Service.objects.filter(category = 'Academics')
    category5 = Service.objects.filter(category = 'Art')
    category6 = Service.objects.filter(category = 'College')

    subcat1 = []
    subcat2 = []
    subcat3 = []
    subcat4 = []
    subcat5 = []
    subcat6 = []

    for obj in category1:
        subcat1.append(obj.subcategory)
    subcat1 = list(set(subcat1)) 

    for obj in category2:
        subcat2.append(obj.subcategory)
    subcat2 = list(set(subcat2)) 

    for obj in category3:
        subcat3.append(obj.subcategory)
    subcat3 = list(set(subcat3)) 

    for obj in category4:
        subcat4.append(obj.subcategory)
    subcat4 = list(set(subcat4)) 

    for obj in category5:
        subcat5.append(obj.subcategory)
    subcat5 = list(set(subcat5)) 

    for obj in category6:
        subcat6.append(obj.subcategory)
    subcat6 = list(set(subcat6)) 

    return render_to_response('activities/activities.html', {'user': request.user,  
        'category1':category1, 'category2':category2, 'category3':category3, 
        'category4':category4, 'category5':category5, 'category6':category6,  
        'subcat1':subcat1,'subcat2':subcat2, 'subcat3':subcat3, 
        'subcat4':subcat4, 'subcat5':subcat5,'subcat6':subcat6  })

4 个答案:

答案 0 :(得分:1)

您应该以这种方式检查POST

if request.method == "POST":     # this will tell you if you are actually receiving a POST
    ...

而不是:

if request.POST:                 # not reliable
    ...

请参阅the docs了解原因。

答案 1 :(得分:1)

这就是我最终解决这个问题的方法。以下示例与我的原始帖子完全不同。注意:用相关代码替换id和action。在我的示例中,{{form4}}通过视图传入,并且是一个带有一个字段的forms.py中的自定义表单。

<form id = "form-id" action="/events/attending" method="post">{% csrf_token %}
    <a href="#" onclick="document.forms['form-id'].submit();" >  Submit </a> 
    {{form4.going}} I am attending this event!
</form>

答案 2 :(得分:0)

您应该像这样使用<a>来阻止自动跳转:

<a href="javascript:void(0);" onclick="document.getElementById('form-id').submit();"> {{obj}} </a>

这假设您将表单提交到当前网址,如果您要提交到其他网址,我建议您使用jquery代替<a>,如下所示:

<form id="form-id" method="post">
<li>
    <input type="hidden" value=" obj " name="name_of_var">
    <a id="sub" href="javascript:void(0);" onclick="document.getElementById('form-id').submit();"> tttttttttt</a>
</li>

<script type="text/javascript">
$(document).delegate("#sub", "click", function () {
    $.ajax({
        type: "POST",
        url: "/your/url/",
        data: {name_of_var: value_of_var},
        dataType: "json",
        success: function () {
            //do something
        }
    })
});

答案 3 :(得分:0)

由于缺乏细节,我认为你的请求永远不会被触发,因为你的href结尾处缺少尾随白色斜线(假设你发布到那个网址)。最好使用尾随白色斜杠来发布请求!

您的代码:

<a href="/activities/view" onclick="document.getElementById('form-id').submit();"> {{obj}} </a>

应该是

<a href="/activities/view/" onclick="document.getElementById('form-id').submit();"> {{obj}} </a>
#                        ^ Note the trailing slash!

让我知道这是否适合您

干杯, Biobirdman