将上下文数据渲染为generic.DetailView

时间:2017-08-15 15:30:54

标签: python django detailview

如何使用上下文数据呈现数据或重定向到generic.DetailView。 我有型号注释

class Note(models.Model):
    key = models.CharField(max_length=50, primary_key=True)
    text = models.TextField()

我的观点是

class ShowNote(generic.DetailView):
    model = Note
    template_name = 'notes/show_note.html'

    def get(self, request, *args, **kwargs):
        try:
            self.object = self.get_object()
        except Http404:
            # redirect here
            return render(request, 'notes/index.html', {'error': 'Note doesnt exist', })
        context = self.get_context_data(object=self.object)
        return self.render_to_response(context)

url(r'^show/(?P.*)/$', views.ShowNote.as_view(), name='show_note'),

页面显示注释的关键字及其文本还有一个按钮,如果文本被更改,则保存文本。

def save_note(request):
    key = request.POST['key']
    selected_note = Note.objects.get(pk=key)
    selected_note.text = request.POST['text']
    selected_note.save()
    //back to show_note

如何在'notes / show_note.html'中呈现数据{'message' : 'note was saved successfully'},但使用相同的主键

1 个答案:

答案 0 :(得分:4)

您可以为此覆盖get_context_data方法。将以下方法放在基于类的视图中。

def get_context_data(self, **kwargs):
    data = super().get_context_data(**kwargs)
    data['message'] = 'note was saved successfully'
    return data

然后在模板中

{{ message }}

docs将是一个很好的帮助。

另一种方法是使用django.contrib.messages中的消息模块。

您可以在代码中使用以下内容

def get(self, request, *args, **kwargs):
.... # your code    
    messages.success(request, "Note was added successfully")

然后在模板中

{% for message in messages%}
    {{ message }}
{% endfor %}