将独立窗体与 DetailView 相结合

Combine independent form with DetailView

我想显示 DetailView 和独立表单以向其他网站服务器发送 API 请求。我制作了 views.py 但我得到的只是空页。在过去的几天里,我试图弄清楚如何调整它,但仍然不知道如何做到这一点。希望你能帮我解决这个问题

views.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)

HTML 我不确定 action 应该为空还是包含 url DetailPostDisplay(需要传递 slug,我不知道如何获取)

        <form method="POST" action="">
        {% csrf_token %}
        {{ form }}
        <input type="submit" class="btn btn-dark float-right mt-2" value="Tłumacz">
        </form>

urls.py

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'),
]

为了子孙后代,我是混杂的,想多了。如果您只想将表单放入 DetailView,请创建 def post 并将逻辑放在那里。代码如下:

views.py

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)