Python 如何从一个模板访问多个常规视图?
首先,很抱歉,我的问题没有答案 我试图弄明白,如何在Django中从一个模板访问多个通用视图 例如: 我有一个Blogpost详细视图:Python 如何从一个模板访问多个常规视图?,python,django,templates,generics,views,Python,Django,Templates,Generics,Views,首先,很抱歉,我的问题没有答案 我试图弄明白,如何在Django中从一个模板访问多个通用视图 例如: 我有一个Blogpost详细视图: class PostView(generic.DetailView): model = Post template_name = "blog/detail.html" 以及创建新注释的表单: class CommentCreate(CreateView): model = Comment template_name = "blog/t
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']
在my urls.py中,我使用以下语句访问详细信息视图:
url(r'^(?P<pk>\d+)/$', views.PostView.as_view(), name='detail')
url(r'^(?P\d+/$),views.PostView.as_view(),name='detail')
显然,我无法通过调用DetailView上的as_view()函数来访问表单
鉴于此,我真的不知道如何将CommentCreate表单添加到我的模板中
如何在另一个通用视图的模板内访问通用视图或表单的数据
谢谢你的帮助 使用mixin!
也许您可以使用,但我将向您展示如何使用(和创建)mixin
现在,模板中有一个“form”变量和一个“post”变量
编辑
不能同时使用两个通用视图,它们都使用SingleObjectMixin作为模型
希望有帮助在听取了@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})
对我来说,这似乎容易多了 停止使用泛型视图,编写您自己的。@bruno desthuilliers我会这样做,然后决定哪种解决方案更适合您。
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})