【问题标题】:Django Custom Template Form and {{next}}Django 自定义模板表单和 {{next}}
【发布时间】:2018-04-14 03:34:09
【问题描述】:

我一直在创建表单,看起来像 {{ forms.as_p }}。 我需要使用此表格登录网站。使用 forms.as_p 一切正常,但我需要创建自己的自定义表单。

问题是,在阅读了大量网站和文档后,我仍然无法理解如何使用我的 css 类和输入字段创建自定义表单。

我试过这个:

action="", method ="post"
                     <div class="form-group">
                            <input type="text" class="form-control" placeholder="Username"  required="">
                        </div>
                        <div class="form-group">
                            <input type="password" class="form-control" placeholder="Password" required="">
                        </div>
<input type="submit" class="btn btn-primary block full-width m-b" value="Log In" />

但它不起作用。 哪些字段,我错过了。

另外我还有一个问题:在我的自定义页面上登录后,是否可以自定义“下一个”变量来重定向?我该怎么做?

【问题讨论】:

  • 您发布的 HTML sn-p 甚至都不完整。 action="", method ="post" 本身没有任何意义。请更清楚您的要求。
  • 谢谢,但我还有一个问题。如果我在forms.py中创建表单并自定义它,我应该如何在我的网页上调用这个表单?
  • @从视图的上下文中返回你的表单
  • 对不起,我是django的新手,还是看不懂。

标签: django django-templates django-registration


【解决方案1】:

通常您使用 forms.py 创建一个表单,您可以通过 Jinja 在 HTML 代码中使用该表单。

您的 forms.py 可能如下所示:

from django import forms

class ProfileForm(forms.Form):
    name = forms.CharField(label='Your name', max_length=100)
    age = forms.IntegerField(label='Your age')

然后您将进行一些清理以确保传递给表单的数据具有正确的格式。

def clean_name(self):
    name = self.cleaned_data.get('name')
    if not name:
        raise forms.ValidationError('You have to type in a name.')
    return name

在您的 views.py 中:

def some_view(request):
      form = ProfileForm(request.POST or None)

      if form.is_valid():
            name = form.cleaned_data.get('name')
            //do something with the name
            user = User.objects.get(username=username)
            user.username = name
            user.save()
            return redirect('to_profile_of_user')
      return render(request, 'change_profile.html', {'form':form})

在这里将表单传递给您的模板(HTML)非常重要。

您的 change_profile.html

<form action="" method="POST" enctype="multipart/form-data">
  {{form.as_p}} //That is the form you passed
  <input type="submit" value="Change" />
</form>

希望我的回答能给你一点建议。现在你已经看到了一个完整的往返。也许你应该仔细看看Django documentation。很有帮助。

代码是即时编写的,未经测试。但这足以进行概述。你不应该忘记导入你需要的东西。我没有那样做。

【讨论】:

  • 感谢您的解释。我和你有同样的事情,但没有清理,并且删除了 name = form.cleaned.data.get (仍然不明白为什么是这一行)。但它不起作用
  • form.cleaned.data.get 用于从您的forms.py 获取清理后的数据。你到底想知道什么?想知道如何使用 css 设置表单样式?
猜你喜欢
  • 2011-10-05
  • 2017-05-02
  • 1970-01-01
  • 2014-07-12
  • 2015-08-30
  • 2013-03-28
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
相关资源
最近更新 更多