簡體   English   中英

DJango-我的forms.py元素未顯示在html模板中

[英]DJango - My forms.py elements are not showing up in the html template

我是Django的新手,正在從事一個項目。 我一直堅持設置一個forms.py,並將其與我的模板集成在一起。 我借助在線上的各種教程完成了所有必需的工作,但無法看到在HTML頁面上以表單聲明的字段。 以下是我用於每個模塊的代碼。 如果有人可以幫助我,那就太好了。

models.py

from django.db import models

class EarlyBirds(models.Model):
    name = models.CharField(max_length=200)
    email = models.CharField(max_length=200)
    contact_number = models.IntegerField()

    def __str__(self):
        return '%s - %s' % (self.name, self.email)

views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.template import RequestContext, loader
from django.shortcuts import render_to_response

from .forms import EarlyBirdsForm

from .models import EarlyBirds

def register(request):
    context = RequestContext(request)
    success=''
    if request.method == 'POST':
        form = EarlyBirdsForm(request.POST)
        if form.is_valid():
            name = request.POST.get('name','')
            email = request.POST.get('email','')
            number = request.POST.get('number','')
            if email:
                email_exist = EarlyBirds.objects.filter(email=email)
                if email_exist:
                    success = 'Thankyou for your intrest! This email is already registered with us. We will get back to you soon.'
                else:
                    eb_obj = EarlyBirds(name=name,email=email,contact_number=number)
                    eb_obj.save()
                    success = 'Thankyou for your intrest! We will get back to you soon.'
            else:
                success = 'Please fill out the required fields'
        else:
            success = form.errors
    else:
        form = EarlyBirdsForm()
    return render_to_response('ComingSoon.html', {'success':success}, context)

表格

from django import forms
from django.forms import ModelForm
from app_name.models import EarlyBirds

class EarlyBirdsForm(forms.Form):
    name = forms.CharField(required=True,max_length=100)
    email = forms.CharField(required=True,max_length=100)
    number = forms.IntegerField(required=True)
    class Meta:
        model = EarlyBirds
        fields = ("name", "email", "number")

模板

<html xmlns="http://www.w3.org/1999/xhtml">
<body align="center">
<form method="POST" action="{%url 'comingsoon:register'%}">
{% csrf_token %}
    <div class="header-blog-comingSoon" align="center">
    <!--<form method="post">

        <span>{{ form.as_p }}</span>    
        <br/>    

        <span><button class="comingsoon-Reg" type="submit">Register</button></span>
        <br/><br/>

        <br/><label class="successLabel">{{success}}</label>
    </div>
</form>
</body>
</html>

project.urls.py

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^ComingSoon/', include('app_name.urls', namespace="comingsoon")),
    url(r'^admin/', include(admin.site.urls)),
]

當我嘗試執行此代碼時,我在html頁面上的“注冊”按鈕中看到的全部內容。 名稱,電子郵件和聯系電話的三個文本字段丟失。 請讓我知道我在這里想念的東西。

您忘記將表單添加到上下文中:

def register(request):
    ...
    return render_to_response('ComingSoon.html', {'success':success, 'form': form}, context)

也許您應該嘗試這樣編寫表單:

class EarlyBirdsForm(forms.ModelForm):
    class Meta:
        model = EarlyBirds
        fields = '__all__'

更容易,更簡單。 由於您正在使用模型中的所有屬性,因此不妨將表單直接與模型連接。

CésarBustíos說的沒錯。 您沒有在模板的上下文字典中添加表單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM