1

我的“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 }} 呈现列表

我想我不明白视图方法是如何工作的。

4

2 回答 2

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模型并使用多对多关系而不仅仅是一个字符字段。这是多对多关系的经典示例之一。或者使用第三方 Django 标记包之一。

于 2013-06-27T20:59:19.020 回答
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>
于 2013-11-19T21:26:19.950 回答