【问题标题】:Is there any way to link existing inputs to django form?有没有办法将现有输入链接到 django 表单?
【发布时间】:2020-12-07 11:35:21
【问题描述】:

在开发应用程序时,我最初开始通过 QT (PySide2) 开发 UI,但我暂停了它以通过 Django 开发完整的“在线版本”。

事实上,我正在一步一步地学习/发现框架以及它是如何工作的。

对于所有 HTML,我都在 Bootstrap Studio 上构建,这可以帮助我节省 大量 时间,当然也让我的工作变得更加轻松。

我目前的问题是我刚刚发现在 Django 中不仅仅是输入/表单的工作方式(我自己的观点!)。我的应用程序与几个引导模式一起工作,以便添加/编辑“元素”,这些“元素”是我的应用程序的实例类型,将在数据库中写入/读取/编辑。

这里的问题是我已经创建了所有 HTML 页面和相关的引导模式,我在互联网上找不到任何方法来将我现有的引导模式链接到 Django 表单。

据我了解,Django 表单“漫画”的工作方式如下:Django 生成一个表单,您必须将其动态集成到 HTML 中。

事实上它并没有真正安排我,因为:

  • 我已经有了自己的引导模式,他们的输入看起来像我想要的那样
  • 我真的不想要 Django 生成的难看的表单
  • 我在表单中有其他与表单无关的元素(进度条)
  • 由于我是 Web 初学者,我不知道的任何其他事情!

因此,我的主要问题是:是否有任何简单/可访问的方法来获取输入,就像通过 QT 一样,我的意思是:

  1. 打开模态
  2. 填写 Input_1、Input_2、Input_3
  3. 在 Django 文件中以任何方式获取这些输入,然后将它们保存在 DB 中(一个接一个)

如果真的在这里看起来很愚蠢,我很抱歉,但我对 Django/Web 真的很陌生,我知道 CSS/HTML 语法,我对 JavaScript 一无所知,我会说我的 Python 水平是中级(足以应付我所有的背-最终用途)。

提前感谢您的帮助!

【问题讨论】:

  • 表单做两件事:生成 html 和请求中的有效表单数据。您可以创建一个表单并仅使用它来验证/处理您感兴趣的请求中的字段。您不需要使用表单来生成 html(但您需要确保 html 中的输入名称与表单预期的名称匹配)。
  • 感谢您的反馈!事实是我没有找到任何仅用于“验证/处理”的文档。所有教程都解释了整个过程,因为 Django 在他们自己的与表单相关的教程中解释自己。没有什么说“顺便说一句,您可以使用现有的 HTML,这里如何仅连接输入”。

标签: python django bootstrap-4 django-forms bootstrap-modal


【解决方案1】:

使用表单进行验证/处理但不生成 html 的简单示例。

假设我们有这个现有的表单

<form action="/some-url" method="POST">
    <input id="foo" name="foo" type="text"/>
    <input id="bar" name="bar" type="text"/>
    <input id="baz" name="baz" type="text"/>
</form>

你可以用这个 Django 表单来表示它:

class MyForm(forms.Form):
    
    # Field names should match the 'name' attributes in the html inputs
    foo = forms.CharField()
    bar = forms.CharField()
    baz = forms.CharField()

并像这样在视图中使用它

def my_view(request):
    if request.method == 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
            # Do stuff
            return HttpRedirectResponse('/success')
    # No need to pass the a form to the template, because we aren't
    # using it to generate html.
    return render(request, 'view.html', {})

如果你想单独使用 html 表单中的字段,完全不使用 Django 表单,直接访问它:

some_val = request.POST['some_val']

(注意错误的布尔值和禁用字段,它们不会出现在 request.POST 中)。

【讨论】:

  • 感谢您提供这些详细信息!但是,我应该如何处理以下标签,因为它们用于生成 HTML ? {% csrf_token %} {{ form.as_p }}
  • 自从我使用 Django 已经有一段时间了,但我猜:假设您启用了 csrf 保护,请保留 csrf_token。对于 form.as_p,您需要将其替换为您自己手工制作的 html。
  • 谢谢,我今天会尝试测试一下,我会给你一个反馈。
猜你喜欢
  • 1970-01-01
  • 2018-11-11
  • 2011-01-20
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多