0

我想在提交表单后显示一个警告框。

当用户第一次访问该页面时,该框将被隐藏,并在提交时显示“新类别已创建”或“类别已存在”。

我想我知道我可以在模板中执行此操作,但我不确定如何在重定向时将变量传递到模板中。

下面是视图。有什么想法我怎么能做到这一点?

我很感激反馈。

@login_required
@locationed
def manage_cat_subcat(request, location):

    form = AddCategory()

    if request.method == 'POST':
        form = AddCategory(request.POST)
        if form.is_valid():
            submitted_cat_name = form.cleaned_data['category_name']

            _, was_created = Category.objects.get_or_create(name=submitted_cat_name)

            return HttpResponseRedirect(reverse('manage_cat_subcat', args=(location.slug,)))

    return render(request, 'inventory/manage_cat_subcat.html', {'location': location, 'form': form})
4

2 回答 2

5

您不必使用任何隐藏数据,只需使用以下命令:

https://docs.djangoproject.com/en/dev/ref/contrib/messages/#using-messages-in-views-and-templates

于 2013-09-10T20:46:04.303 回答
0

看起来您正在谈论根据用户提交某些信息来呈现对话框。如果是这样,我强烈建议在字段失去焦点后使用 JQuery 提取类别字段的值,然后通过 AJAX 调用立即将该类别信息传递给视图文件中的专用方法。根据响应,您将显示相应的对话框。所以在你的views.py中会是这样的:

    @render_json
    def ajax_category_check(request){
      if request.method == 'POST' and 'category_name' in request.POST:           
         #insert your code that checks new or existing categories

         #if the category exists...
         return {'exists': True}

      return {'exists': False}
    }

AJAX 的一个优点是它消除了让用户处理表单提交/浏览器页面刷新的负担,从而使用户体验更加流畅。

另一方面,如果您只是在提交表单之前显示警告对话框,请拦截表单提交并使用 JQuery 显示对话框:

    $('form').click(function(event){
        $('#dialog').show();

        /* after a delay or after dialog confirmation, etc... */
        $('form').submit();
    });
于 2013-09-11T18:38:52.827 回答