我的'Note'模型有一个名为'tags'的Charfield。我想取Note.tags字符串并将其渲染为。我有一个方法会给我一个python列表,我有点希望我可以在模板中使用表单方法'.as_ul'。但我似乎无法将变量放入模板中。这是我正在尝试的:
我的观点类:
import string
...
class NoteDetailView(generic.DetailView):
model = Note
template_name = 'note_taker/note'
def tag_string_to_list(self):
tag_string = Note.tags
tag_list = string.split(tag_string)
return render(template_name, Context({'tag_list':tag_list}, note_taker))
我的模板:
<ul>
{{ tag_list.as_ul }}
</ul>
即使我对如何使用'.as_ul'有误,我甚至无法使用{{tag_list}}呈现列表
我想我不理解视图方法是如何工作的。
答案 0 :(得分:0)
使用get_context_data
方法。
class NoteDetailView(generic.DetailView):
def get_context_data(self, **kwargs):
context = super(NoteDetailView, self).get_context_data(**kwargs)
context['tag_list'] = Note.tags.split()
return context
在模板中,您将无法使用.as_ul
,但内置过滤器unordered_list
可能会执行您想要的操作:
<ul>
{{ tag_list|unordered_list }}
</ul>
虽然您应该考虑定义独立的Tag
模型并使用多对多关系而不仅仅是char字段。这是多对多关系的典型例子之一。或者使用第三方Django标记包之一。
答案 1 :(得分:0)
我总是使用Django的标准ContextMixin
。它确保视图对象在模板中可用view
。
因此视图变得像
class NoteDetailView(generic.ContextMixin, generic.DetailView):
model = Note
template_name = 'note_taker/note'
def tag_string_as_list(self):
return Note.tags.split()
在视图中你做了:
<ul>{{ view.tag_string_as_list }}</ul>