0

我在同一个模板中有 2 个表单。一个将国家标签添加到当前用户配置文件中,另一个添加兴趣标签。两种形式都发布到同一个 url。两个标签字段都通过自动完成过滤,因此两个字段都有相应的内容。国家输入将返回国家列表等。

当我通过国家标签字段搜索时,我可以添加一个国家标签。惊人的!但是,当尝试添加兴趣时,spinner.gif 被激活,但在我的控制台中,帖子返回 404,因此没有添加实际的兴趣标签。

模板:其他形式相同,只需将 ids: 替换CountryInterest.

<form id="addCountryTagForm" class="add_tags_form" method="POST" action="/tag/add/"> 
     {% csrf_token %}
     <input id="country-tag-input" class="input-text inline required tag-select" name="tagname" type="hidden" />
     <button class="btn addtag" type="submit" id="addCountryTag">
           <span>Add</span>
      </button> 
</form>

阿贾克斯:

$('.add_tags_form').submit(function(e) {
     var $this = $(this);
     var $loader = $('<div class="tag-loader"><img src="/static/images/misc/spinner.gif" /></div>');
     $this.append($loader);

     e.preventDefault();
     var action = $this.attr("action");

     result = $.ajax({
          url: action,
          data: {
               'csrfmiddlewaretoken':$('input[name^="csrfmiddlewaretoken"]').val(),
               'tagname':$('input[name^="tagname"]').val()
           },
           type: "POST",
           success: function(data) {
                $('.tag-section').load('/account/tag-section/');
                $('input[name^="tagname"]').val('');
                $loader.remove();
           },
           error: function(jqXHR, textStatus, errorThrown) {
                $loader.remove();
           }
       });
       return false;
 });

我真的不知道为什么这不起作用。我想要实现的目标是不是遥不可及?发布到同一个 url 的 2 个表单不能在同一个模板中工作吗?如果有人能提供洞察力,将不胜感激。

4

2 回答 2

1

你需要给你的按钮一个name属性。通过检查按下的按钮的名称,您可以在一个页面上发布两个表单。这可以这样做:

技术1

...
if form.is_valid():
    if "button1" in request.POST:
        # do things for form 1
    elif "button2" in request.POST:
        # do things for form 2
...

技巧2

name根据您正在查看country或更改隐藏字段的属性interest

您也没有以最好的方式将 jQuery 与 Django 一起使用。如,您在提交信息时没有使用views.py或文件。forms.py看看这个使用 jQuery 和 Django 的答案:如何使用 JQuery 和 Django (ajax + HttpResponse)?

于 2012-08-20T19:11:08.390 回答
0

尝试在设置中将DEBUG设置为True,通过控制台(或Firebug)查看结果404页面;404 错误可能不是由缺少 URL 引起的,而是由视图拒绝输入引起的,调试信息可以帮助查明原因。

一个可能的原因可能是任何代码填充<input id="country-tag-input">. 如果 id 变为interest-tag-input,这可能会导致标签的值未设置,从而向 Django 发送一个空的标签名。

于 2012-08-20T18:57:17.637 回答