2017-08-15 57 views
0

如何渲染數據或將上下文數據重定向到generic.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 

我怎麼能呈現「票據/ show_note.html」,但與相同的主鍵

+0

你進去看了'django.contrib.messages'模塊? – wmorrell

+0

@wmorrell不,但我會看到它。 – YMY

回答

3

數據{'message' : 'note was saved successfully'}您可以覆蓋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 %}