我目前正在为 Django 创建自己的标记应用程序。
以下是模型:
class Tag(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
tags = models.ManyToManyField(Tag)
我为我的模型创建了一个表单,Book
并为Tag
输入创建了一个小部件:
class BookForm(ModelForm):
class Meta:
model = Book
fields = ('title', 'tags')
widgets = {
'tags': TagWidget
}
class TagWidget(Widget):
"""
Widget for Tag input fields.
"""
def render(self, name, value, attrs=None):
final_attrs = self.build_attrs(attrs, name=name)
final_attrs['class'] = 'tag-input'
options = []
# TODO the following tags should be assigned from the model directly
options.append('tag1');
options.append('tag2');
list_element = u'<ul%s>' % flatatt(final_attrs)
return mark_safe(list_element + '\n<li>' + (u'</li>\n<li>'.join(options)) + '</li>\n</ul>')
问题
- 如何将当前存在的标签添加到选项数组(
options.append(...)
)? - 另外,如何改进 html 代码的创建(见最后一行
mark_safe
)?我想将所有 html 代码放在其他地方(最好放在我的模板文件夹中)。