【问题标题】:why is my input fields not showing in the website?为什么我的输入字段没有显示在网站上?
【发布时间】:2020-05-20 17:25:54
【问题描述】:

我使用相同的代码创建了一个登录和注册页面。注册页面显示用户名输入字段和其他字段,但登录页面仅显示按钮。任何人都可以在这方面帮助我

代码:

登录页面:

<div class="content-section">
            <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Join Today</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Sign Up</button>
            </div>
        </form>
        <div class="border-top pt-3">
            <small class="text-muted">
                Already Have An Account? <a class="ml-2" href="{% url 'login' %}">Sign In</a>
            </small>
        </div>
    </div>

注册页面:

<div class="site-section">
            <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Log In </legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Login</button>
            </div>
        </form>
        <div class="border-top pt-3">
            <small class="text-muted">
                Need An Account? <a class="ml-2" href="{% url 'register' %}">Sign Up Now</a>
            </small>
        </div>
</div>

Registration page

Login page

这是项目的视图 视图.py

from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm
from .models import Post
from django.contrib.auth.decorators import login_required

def home(request):
    context = {
        'posts': Post.objects.all()
    }
    return render(request, 'blog/home.html', context)


def about(request):
    return render(request, 'blog/about.html', {'title': 'About'})

def gallery(request):
    return render(request, 'blog/gallery.html', {'title': 'Gallery'})

def foodopedia(request):
    return render(request, 'blog/foodopedia.html', {'title': 'Foodopedia'})


def register(request):
    if request.method == 'POST':
        form = UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            messages.success(request, f'Account created for {username}!')
            return redirect('blog-home')
    else:
        form = UserRegisterForm()
    return render(request, 'blog/register.html', {'form': form})

def login(request):
    return render(request, 'blog/login.html', {'title': 'Login'})

@login_required
def profile(request):
    return render(request, 'blog/profile.html', {'title': 'Profile'})

def upload(request):
    context = {}
    if request.method == 'POST':
        uploaded_file = request.FILES['document']
        fs = FileSystemStorage()
        name = fs.save(uploaded_file.name, uploaded_file)
        context['url'] = fs.url(name)
        context['filename'] = name
        pred, probability = process_image(name)

        context['prediction'] = pred
        context['probability'] = probability

    return render(request, 'blog/foodopedia.html', context)

这是项目的urls.py

from django.contrib import admin
from django.urls import path, include
from blog import views as blog_views

from django.contrib.auth import views as auth_views
from blog import views as blog_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/', blog_views.register, name='register'),
    path('profile/', blog_views.profile, name='profile'),
    path('', include('blog.urls')),
    path('login/', auth_views.LoginView.as_view(template_name='blog/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='blog/logout.html'), name='logout'),

]

这是form.py文件:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm


class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2']

【问题讨论】:

  • 我认为我们需要查看一些视图代码。我猜测您的登录视图没有将form 传递给模板。
  • 我已经添加了views和urls.py的代码,你能帮我解决问题吗?
  • 能否也提供forms.py文件?
  • 我已将代码添加到表单中
  • 您没有登录表单。您需要添加一个,并在视图中引用它,就像使用注册表单一样。

标签: django django-crispy-forms


【解决方案1】:

你忘了在forms.py中创建一个新表单,那么也别忘了增强你的登录视图。

【讨论】:

    【解决方案2】:

    你可以试试这个,改编自this tutorial中的例子:

    from django.shortcuts import render, redirect
    from django.contrib.auth import authenticate, login
    from django.contrib.auth.forms import AuthenticationForm
    
    def login(request):
        if request.user.is_authenticated:
            return redirect('/')
        if request.method == 'POST':
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                return redirect('/')
            else:
                form = AuthenticationForm(request.POST)
                return render(request, 'blog/login.html', {'form': form, 'title': 'Login'})
        else:
            form = AuthenticationForm()
            return render(request, 'blog/login.html', {'form': form, 'title': 'Login'})
    

    要使用它,您必须将urls.py 中的登录行更改为:

        path('login/', blog_views.login, name='login'),
    

    【讨论】:

    • 哦,等一下 - 我刚刚看到你的 urls.py,而你正在使用默认的 LoginView。在这种情况下,您的views.py 中不需要login 视图。
    • 所以我认为它应该可以工作,正如你所拥有的那样。我会安装 django-debug-toolbar,它可以让您检查上下文中发送到模板的内容。然后您可以检查form 对象是否正在发送到模板。
    • 我尝试了使输入字段出现但给出“TypeError at /login/ login() 需要 1 个位置参数但给出了 2 个”错误登录时的替代代码
    • 谢谢你,我会按照教程来的
    猜你喜欢
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多