在django包含模板标签中处理请求
我是Django的新手,并试图将上传文件格式转换为包含标签。 所以我可以在各种模板中使用它。
我创建了以下包含标记:
#upload_files.py @register.inclusion_tag('upload_form.html') def upload_handler(context): request = context['request'] view_url = reverse('upload.views.upload_handler') if request.method == 'POST': form = UploadForm(request.POST, request.FILES) if form.is_valid(): form.save() return HttpResponseRedirect(view_url) upload_url, upload_data = prepare_upload(request, view_url) form = UploadForm() upload_model_list = UploadModel.objects.all().order_by('-pub_date')
我希望现在将其包含在模板中,所以在我拥有的页面上:
#mypage.html {% extends 'base.html' %} {% load upload_files %} {% upload_handler %}
我收到以下错误:
upload_handler takes 1 arguments
我应该从模板传递什么论点?
在注册标签时需要添加takes_context=True
,以便让django将上下文对象传递给函数:
@register.inclusion_tag('upload_form.html', takes_context=True)
默认的context
将永远是第一个参数!
有关更多详细信息,请参阅django关于包含标签的文档。
附注:仔细确定在哪些页面上使用了此模板标记,因为视图可能会以某种方式呈现附加表单/处理发布请求,这些请求可能会与您的标记提供的逻辑相冲突(例如,如果表单验证将会触发if该页面可能会被来自另一个表格的发布请求调用)。 你可以例如。 另外检查一些HTML元素的名称是否在request.POST
如果你有一个页面上的多个表单!