【问题标题】:Combine independent form with DetailView将独立表单与DetailView结合起来
【发布时间】:2020-06-09 15:07:10
【问题描述】:

我想显示 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'),
]

【问题讨论】:

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

标签: python django detailview


【解决方案1】:

为了子孙后代,我混为一谈,想多了。如果您只想将表单放入 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    相关资源
    最近更新 更多