首先,抱歉我的愚蠢问题,但我没有找到我的问题的答案。
我正在尝试弄清楚如何从Django中的一个模板访问多个通用视图。
实施例: 我有一个Blogpost详细信息 - 视图:
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中,我正在使用以下语句访问Detail-View:
url(r'^(?P<pk>\d+)/$', views.PostView.as_view(), name='detail')
显然,我无法通过调用DetailView上的as_view()函数来访问我的表单。
有了这个,我真的无法弄清楚,如何将CommentCreate-Form添加到我的模板中。
如何在另一个通用视图的模板中访问通用视图或表单的数据?
感谢您的帮助!
答案 0 :(得分: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']
现在,您有一个&#39;表格&#39;模板中的变量和帖子&#39;变量
修改强>
您不能同时使用2个通用视图,它们都使用SingleObjectMixin作为其模型。
希望帮助
答案 1 :(得分:0)
根据@bruno desthuilliers的建议,我尝试了一种不使用通用视图的不同方法:
在models.py中添加:
from django.forms import ModelForm
class CommentCreate_ungen(ModelForm):
class Meta:
model = Comment
fields = ['author', 'email', 'comment']
在views.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})
对我来说,这似乎更容易!