django - 处理 django 包含模板标签中的请求

标签 django templates request templatetags

我是 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/

相关文章:

django - 无法将目标WSGI脚本'/var/www/backend/backend/wsgi.py'加载为Python模块

mysql - Django 在 object.save() 上引发 MySQL 错误 1452,但 INSERT 有效

c++ - 如何在另一个类中专门化模板类的构造函数?

python - 在 web.py 中呈现 HTML

php - 将 PHP 变量传递给 Json

python - virtualenv - ModuleNotFoundError : No module named 'django' ?

python - 在 django settings.py 中包含应用程序

python - Django 1.6 : 'instancemethod' object has no attribute '__getitem__'

PHP并发HTTP请求?

symfony - 如何设置请求 symfony 的内容?