Python 将独立表单与DetailView相结合

Python 将独立表单与DetailView相结合,python,django,detailview,Python,Django,Detailview,我想显示DetailView和独立表单,以便将API请求发送到其他网站服务器。我创建了views.py,但唯一得到的是空页面。在过去的五天里,我一直在想如何调整它,但仍然不知道该怎么做。希望你能帮我做这件事 视图.py class DetailPostDisplay(DetailView): model = EveryPost template_name = 'post/detailpost.html' def get_context_data(self, **kwar

我想显示DetailView和独立表单,以便将API请求发送到其他网站服务器。我创建了views.py,但唯一得到的是空页面。在过去的五天里,我一直在想如何调整它,但仍然不知道该怎么做。希望你能帮我做这件事

视图.py

class DetailPostDisplay(DetailView):
    model = EveryPost
    template_name = 'post/detailpost.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form'] = DictForm()
        return context

class DictWindowForm(SingleObjectMixin, FormView):
    template_name = 'post/detailpost.html'
    form_class = DictForm
    model = EveryPost

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        return super().post(request, *args, **kwargs)

    def get_success_url(self):
        return reverse('detailpost', kwargs={'slug': self.object.slug})

class DetailPostList(View):
    def get(self, request, *args, **kwargs):
        view = DetailPostDisplay.as_view()
        return view(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        view = DictWindowForm.as_view()
        return view(request, *args, **kwargs)
from django.urls import path
from . import views
from .views import PostListPl, PostListRu, DetailPostDisplay

urlpatterns = [
    path('', PostListPl.as_view(), name='index_pl'),
    path('ru/', PostListRu.as_view(), name='index_ru'),
    path('about/', views.about, name='about'),
    path('<slug:slug>/', DetailPostDisplay.as_view(), name='detailpost'),
]
class DetailPostDisplay(DetailView):
    model = EveryPost
    template_name = 'post/detailpost.html'

    def get_context_data(self, **kwargs):
        context = super(DetailPostDisplay, self).get_context_data(**kwargs)
        context['form'] = DictForm
        return context

    def post(self, request, *args, **kwargs):
        form = DictForm(request.POST)
        if form.is_valid():
            self.object = self.get_object()
HTML 我不确定操作是应该为空还是应该包含urlDetailPostDisplay(需要传递slug,我不知道如何获取)


{%csrf_令牌%}
{{form}}
url.py

class DetailPostDisplay(DetailView):
    model = EveryPost
    template_name = 'post/detailpost.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form'] = DictForm()
        return context

class DictWindowForm(SingleObjectMixin, FormView):
    template_name = 'post/detailpost.html'
    form_class = DictForm
    model = EveryPost

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        return super().post(request, *args, **kwargs)

    def get_success_url(self):
        return reverse('detailpost', kwargs={'slug': self.object.slug})

class DetailPostList(View):
    def get(self, request, *args, **kwargs):
        view = DetailPostDisplay.as_view()
        return view(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        view = DictWindowForm.as_view()
        return view(request, *args, **kwargs)
from django.urls import path
from . import views
from .views import PostListPl, PostListRu, DetailPostDisplay

urlpatterns = [
    path('', PostListPl.as_view(), name='index_pl'),
    path('ru/', PostListRu.as_view(), name='index_ru'),
    path('about/', views.about, name='about'),
    path('<slug:slug>/', DetailPostDisplay.as_view(), name='detailpost'),
]
class DetailPostDisplay(DetailView):
    model = EveryPost
    template_name = 'post/detailpost.html'

    def get_context_data(self, **kwargs):
        context = super(DetailPostDisplay, self).get_context_data(**kwargs)
        context['form'] = DictForm
        return context

    def post(self, request, *args, **kwargs):
        form = DictForm(request.POST)
        if form.is_valid():
            self.object = self.get_object()
从django.url导入路径
从…起导入视图
从.views导入PostListPl、PostListRu、DetailPostDisplay
URL模式=[
路径(“”,PostListPl.as_view(),name='index_pl'),
路径('ru/',PostListRu.as_view(),name='index_ru'),
路径('about/',views.about,name='about'),
路径('/',DetailPostDisplay.as_view(),name='detailpost'),
]

对于未来的几代人,我把它混为一谈,想得太多了。若您只想将表单放入DetailView,那个么创建def post并将逻辑放入其中。代码如下:

视图.py

class DetailPostDisplay(DetailView):
    model = EveryPost
    template_name = 'post/detailpost.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['form'] = DictForm()
        return context

class DictWindowForm(SingleObjectMixin, FormView):
    template_name = 'post/detailpost.html'
    form_class = DictForm
    model = EveryPost

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        return super().post(request, *args, **kwargs)

    def get_success_url(self):
        return reverse('detailpost', kwargs={'slug': self.object.slug})

class DetailPostList(View):
    def get(self, request, *args, **kwargs):
        view = DetailPostDisplay.as_view()
        return view(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        view = DictWindowForm.as_view()
        return view(request, *args, **kwargs)
from django.urls import path
from . import views
from .views import PostListPl, PostListRu, DetailPostDisplay

urlpatterns = [
    path('', PostListPl.as_view(), name='index_pl'),
    path('ru/', PostListRu.as_view(), name='index_ru'),
    path('about/', views.about, name='about'),
    path('<slug:slug>/', DetailPostDisplay.as_view(), name='detailpost'),
]
class DetailPostDisplay(DetailView):
    model = EveryPost
    template_name = 'post/detailpost.html'

    def get_context_data(self, **kwargs):
        context = super(DetailPostDisplay, self).get_context_data(**kwargs)
        context['form'] = DictForm
        return context

    def post(self, request, *args, **kwargs):
        form = DictForm(request.POST)
        if form.is_valid():
            self.object = self.get_object()
以及稍后将变量从表单传递到模板的代码

            context = super(DetailPostDisplay, self).get_context_data(**kwargs)
            context['form'] = DictForm
            context['word'] = request.POST.get('word')
            return self.render_to_response(context=context)

不清楚您在浏览器栏中输入的哪个url不起作用,以及您所说的“我得到一个空页面”是什么意思。哪一页?我认为您正在尝试将表单添加到详细视图中,那么您的
DictWindowForm
视图是正确的(如果它是一个视图,为什么称为表单),您应该使用它而不是
DetailPostDisplay
(您可以完全删除它)。另外
{object}
是模板中特定的
EveryPost
,因此可能
{{{object.slug}}
就是slug。