我目前正在开发一个很好地渲染表单的模板标记。
@register.inclusion_tag('myforms.html', takes_context=True)
def myform(context, form)
context['form'] = form
context['error_classes'] = 'has-error has-feedback'
return context
在myforms.html
中,我使用了一些JavaScript库和css文件。在模板中我添加了脚本:
<link rel="stylesheet" href="{% static 'xyz.css' %}"/>
<script lang="javascript" src="{% static 'xyz.js' %}"></script>
<div>
...
</div>
在单个网站上呈现多个表单时,html文档中的<links>
和<script>
多次出现。
一种可能性是将它们包含在<head>
标记内的基本模板中。但即使不需要它们,它们仍然在html文件中。
将{{ block head }}
添加到<head>
内的基本模板也不起作用。为此,需要附加新的js和css文件{{ block.super }}
,但{{ block.super }}
在包含中不起作用(请参阅https://stackoverflow.com/a/6566463/2014080)。
答案 0 :(得分:2)
我对你为什么使用包含有点好奇。虽然他们确实有一些用例,但你不应该经常使用它们。反正。
Django表格碰巧有一个功能,可以收集assets 基本上,您应该直接在表单上定义特定于表单的媒体,如下所示:
class MyForm(ModelForm):
# whatever you have there, then
class Media:
css = {
'screen': ('foo.css', 'bar.css'),
}
js = ('jquery.js', 'myform.js')
关键是它们是由Django收集的,您可以在视图或模板标签中操作它们,或者在您可以访问所有表单的任何位置操作它们。假设您有MyForm
和MyOtherForm
,您可以这样做:
context['form_media'] = my_form.media + my_other_form.media
在您的根模板中,您可以这样做:
<head>
{{ form_media }}
</head>
只要你在所有观点中坚持这个惯例。
答案 1 :(得分:0)
django-sekizai应该做到这一点。使用此应用程序提供的标签,您可以动态地将脚本或媒体资源添加到文档中。请务必同时查看the docs。