我是 Django 的新手,正在尝试将上传文件表单放入包含标签中。所以我可以在各种模板中使用它。
我创建了以下包含标签:
#upload_files.py
@register.inclusion_tag('upload_form.html')
定义上传处理程序(上下文):
请求 = 上下文['请求']
view_url = reverse('upload.views.upload_handler')
如果 request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
如果 form.is_valid():
表单.save()
返回 HttpResponseRedirect(view_url)
upload_url,upload_data = prepare_upload(请求,view_url)
表单 = 上传表单()
upload_model_list = UploadModel.objects.all().order_by('-pub_date')
我现在希望将其包含在模板中,因此在我的页面上:
#mypage.html
{% 扩展 'base.html' %}
{% 加载上传文件 %}
{% 上传处理程序 %}
我收到以下错误:
upload_handler 需要 1 个参数
我应该从模板传递什么参数?
最佳答案
您需要添加 takes_context=True
在注册标签以获取 django 时,将上下文对象传递给函数:
@register.inclusion_tag('upload_form.html', takes_context=True)
默认
context
那么将永远是第一个参数!有关更多详细信息,请参阅 inclusion tags 上的 django 文档。 .
旁注:仔细决定您在哪些页面上使用此模板标签,因为 View 可能会以某种方式呈现额外的表单/处理发布请求,这可能与您的标签提供的逻辑发生冲突(例如,表单验证将被触发,如果该页面可能会被来自另一个表单的发布请求调用)。你可以例如。另外检查一些 HTML 元素的名称是否在
request.POST
中如果页面上有多个表单!
关于django - 处理 django 包含模板标签中的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713022/