Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从一个模板访问多个常规视图?_Python_Django_Templates_Generics_Views - Fatal编程技术网

Python 如何从一个模板访问多个常规视图?

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

首先,很抱歉,我的问题没有答案

我试图弄明白,如何在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']
在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})