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

Render context data to generic.DetailView

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

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'} 但具有相同的主键

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

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 %}