首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将html格式转换为Django格式并保留样式?

如何将html格式转换为Django格式并保留样式?
EN

Stack Overflow用户
提问于 2018-08-08 03:15:40
回答 1查看 896关注 0票数 2

我有一个纯html表单,我希望使用Django后端收集登录信息。

下面是我的纯非Django html表单:

代码语言:javascript
复制
<form id="contactForm" method="POST">
    <div class="row">
        <div class="form-group">
            <div class="col-md-12">
                <label>Username or E-mail Address</label>
                <input type="text" value="" class="form-control">
            </div>
        </div>
    </div>
    <div class="row">
        <div class="form-group">
            <div class="col-md-12">
                <a class="pull-right" href="#">(Lost Password?)</a>
                <label>Password</label>
                <input type="password" value="" class="form-control">
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-6">
            <span class="remember-box checkbox">
                <label for="rememberme">
                    <input type="checkbox" id="rememberme" name="rememberme">Remember Me
                </label>
            </span>
        </div>
        <div class="col-md-6">
            <a href="#" class="btn btn-primary btn-orange uppercase pull-right">Login</a>
        </div>
    </div>
</form>

下面是所有样式的外观:

为了处理这个表单,我创建了一个视图:

代码语言:javascript
复制
def login_page(request):
    form = LoginForm(request.POST or None)
    context = {'form': form}

    next_ = request.GET.get('next')
    next_post = request.POST.get('next')
    redirect_path = next_ or next_post or None

    if form.is_valid():
        username = form.cleaned_data.get('username')
        password = form.cleaned_data.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            try:
                del request.session['guest_email_id']
            except:
                pass
            if is_safe_url(redirect_path, request.get_host()):
                return redirect(redirect_path)
            return redirect('/')
        else:
            print('Error')

    return render(request, 'users/login.html', context)

我知道我需要一个我创建的form.py类,如下所示:

代码语言:javascript
复制
class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput())

我如何使用这个form类来呈现与html保持样式相同的表单。此外,在呈现之后,如何使用下面伪装成按钮的链接将表单数据提交给视图进行处理?

代码语言:javascript
复制
<a href="#" class="btn btn-primary btn-orange uppercase pull-right">Login</a>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-08 04:06:31

在我使用Django的经验中,不可能像在继承forms.ModelFormforms.Form的表单中创建那样创建一个HTML form 。我们能做的最好的事情就是,将类分配给小部件,这些小部件被分配给attrs表单中的特定表单字段,如下所示:

代码语言:javascript
复制
class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control'}))

当您在模板中使用{{ form.as_p }}或其他类似工具时,这会将您的CSS类附加到呈现的表单中。

然后,为了呈现divs,您可以自己解压表单,而不是让Django完成这项工作,如下所示:

代码语言:javascript
复制
<form id="contactForm" method="POST">
    <div class="row">
        <div class="form-group">
            <div class="col-md-12">
                {{ form.username.errors }}
                <label for="{{form.username.id_for_label}}">Username or E-mail Address</label>
                {{ form.username }}
            </div>
        </div>
    </div>
    <div class="row">
        <div class="form-group">
            <div class="col-md-12">
                {{form.password.errors}}
                <a class="pull-right" href="#">(Lost Password?)</a>
                <label for="{{form.password.id_for_label}}">Password</label>
                {{form.password}}
            </div>
        </div>
    </div>
.........

诸若此类。

然而,将你的设计和逻辑结合起来通常被认为是一种糟糕的做法,我们在这里显然就是这么做的。

参考资料:Django Documentation - Working With Forms

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51733926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档