我想在提交表单后显示一个提示框。
当用户首次访问该页面时,该框将被隐藏,并在提交时显示“新类别已创建”或“类别已存在”。
我想我知道我可以在模板中执行此操作,但我不确定如何将变量传递到重定向模板中。
以下是视图。有什么想法我能做到这一点吗?
我很感激反馈。
@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})
答案 0 :(得分:3)
您不必使用任何隐藏数据,只需使用:
https://docs.djangoproject.com/en/dev/ref/contrib/messages/#using-messages-in-views-and-templates
答案 1 :(得分: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();
});