Django的 - 如何添加HTML属性对模板

Django的 - 如何添加HTML属性对模板

问题描述:

形式假设我有以下模板:Django的 - 如何添加HTML属性对模板

<div id="openid_input_area"> 
{{ form.openid_identifier }} 
    <input name="bsignin" type="submit" value="{% trans "Sign in" %}"> 
</div> 

我如何添加一个CSS类form.openid_identifier?

由于我秉承SOC原则,我希望设计师能够提高模板我要做到这一点的表单模型,但在模板本身。

我在文档上找不到任何关于此的内容。有没有办法在模板上做到这一点?

我已经成功地编写一个简单的解决我的问题:

我写了一个custom template tag

from django import template 

register = template.Library() 

def htmlattributes(value, arg): 
    attrs = value.field.widget.attrs 


    data = arg.replace(' ', '') 

    kvs = data.split(',') 

    for string in kvs: 
     kv = string.split(':') 
     attrs[kv[0]] = kv[1] 

    rendered = str(value) 

    return rendered 

register.filter('htmlattributes', htmlattributes) 

和所有我在做模板是:

{{ form.openid_identifier|htmlattributes:"class : something, id: openid_identifier" }} 

我不知道任何其他方式在平原Django。像form.fieldform.as_p这样的快捷方式确实可以帮助您入门,但最终可以使用纯html。我就是这么看的。并不是说没有必要对渲染进行更多的控制。我记得在Django邮件列表上阅读this discussion about form rendering

Simon Willison是/正在为图书馆工作,让设计师有更多的控制权,你可以找到它的来源on github。它有点老,所以它可能不再工作了。而对于你的问题,这个例子看起来可能是你有帮助:

{% field form.name class="myclass" %} 
<!-- renders as --> 
<input type="text" name="name" id="id_name" class="myclass"> 

其实这个功能应该是很容易实现的。您需要一个接受表单字段的模板标记,更新小部件属性(您可以在表单上设置的属性)并呈现该字段。

在窗体上迭代会生成BoundField的实例,该实例使用其__unicode__方法呈现自身。您需要将所有关键字参数传递给小部件渲染函数。这种想法的草案:

@register.simple_tag 
def field(boundfield, **kwargs): 
    if self.field.show_hidden_initial: 
     return self.as_widget(attrs=kwargs) + self.as_hidden(only_initial=True) 
    return self.as_widget(attrs=kwargs)