2013-10-22 24 views
0

首先,對於我的問題很抱歉,但我沒有找到我的問題的答案。如何從一個模板訪問多個通用視圖?

我想弄清楚,如何從Django中的一個模板訪問多個通用視圖。

例子: 我有一個博客帖子詳細信息,查看:

class PostView(generic.DetailView): 
    model = Post 
    template_name = "blog/detail.html" 

和一個表單創建一個新評論:

class CommentCreate(CreateView): 
model = Comment 
    template_name = "blog/test.html" 
    fields = ['author', 'email', 'comment'] 

在我的urls.py,我訪問細節 - 查看以下聲明:

url(r'^(?P<pk>\d+)/$', views.PostView.as_view(), name='detail') 

很明顯,我無法通過調用a s_view() - 在DetailView上的函數。

有了這個給出,我真的不知道,如何將CommentCreate-Form添加到我的模板。

如何在另一個通用視圖的模板中訪問通用視圖或表單的數據?

感謝您的幫助!

+0

停止使用通用視圖並編寫自己的。 –

+0

@bruno desthuilliers我會這樣做,並決定哪種解決方案更合適。 – wtfzn

回答

1

使用mixins! 也許你可以使用SingleObjectMixin,但我會告訴你如何使用(和創建)mixin。

class DetailViewMixin(object): 
    details_model = None 
    context_detail_object_name = None 

    def get_context_data(self, **kwargs): 
     context = super(DetailViewMixin, self).get_context_data(**kwargs) 
     context[self.context_detail_object_name] = self.get_detail_object() 
     return context 

    def get_detail_object(self): 
     return self.details_model._default_manager.get(pk=self.kwargs['pk']) 

class CommentCreate(DetailViewMixin, CreateView): 
    details_model = Post 
    context_detail_object_name = 'post' 
    model = Comment 
    template_name = "blog/test.html" 
    fields = ['author', 'email', 'comment'] 

現在,您在模板和'後'變量中有'變形'變量。

編輯

不能使用2個通用視圖一起,都使用SingleObjectMixin他們的模型。

希望幫助

0

從@bruno desthuilliers的意見後,我嘗試了不同的方法,而無需使用通用視圖:

添加在models.py:

from django.forms import ModelForm 

class CommentCreate_ungen(ModelForm): 
class Meta: 
    model = Comment 
    fields = ['author', 'email', 'comment'] 

用於意見.py代替基於通用類的視圖這些功能:

from django.shortcuts import render_to_response 
from blog.models import CommentCreate_ungen 

def index_ungen(request): 
    post = Post.objects.all() 
    return render_to_response('blog/index_ungen.html', {'post': post}) 

def detail_ungen(request, pk): 
    post = Post.objects.get(pk=pk) 
    form = CommentCreate_ungen() 
    return render_to_response('blog/detail_ungen.html', {'post': post, 'form': form}) 

對我來說,這似乎更容易!

相關問題