7

我是 Django 新手,正在尝试将上传文件表单放入包含标签中。所以我可以在各种模板中使用它。

我创建了以下包含标签:

#upload_files.py

@register.inclusion_tag('upload_form.html')
def 上传处理程序(上下文):
    请求 = 上下文 ['请求']
    view_url = reverse('upload.views.upload_handler')
    如果 request.method == 'POST':
        表单 = UploadForm(request.POST, request.FILES)
        如果 form.is_valid():
            form.save()
        返回 HttpResponseRedirect(view_url)

    upload_url, upload_data = prepare_upload(request, view_url)
    表单 = UploadForm()

    upload_model_list = UploadModel.objects.all().order_by('-pub_date')

我现在希望将其包含在模板中,因此在我的页面上:

#mypage.html
{% 扩展 'base.html' %}
{% 加载上传文件 %}

{% 上传处理程序 %}

我收到以下错误:

upload_handler 需要 1 个参数

我应该从模板传递什么参数?

4

1 回答 1

13

注册标签时需要添加takes_context=True让django将上下文对象传递给函数:

@register.inclusion_tag('upload_form.html', takes_context=True)

默认情况下context将始终是第一个参数!

有关更多详细信息,请参阅 django 关于包含标签的文档。

附注:仔细决定您在哪些页面上使用此模板标签,因为视图可能会以某种方式呈现其他表单/处理发布请求,这可能与您的标签提供的逻辑相冲突(例如,表单验证将被触发,如果该页面可能会被来自另一个表单的发布请求调用)。你可以例如。request.POST如果页面上有多个表单,请另外检查是否包含某些 HTML 元素的名称!

于 2011-07-16T00:48:58.167 回答