代码之家  ›  专栏  ›  技术社区  ›  Paras Botadra

DJango-我的表格。py元素未显示在html模板中

  •  0
  • Paras Botadra  · 技术社区  · 9 年前

    我是Django的新手,正在做一个项目。我忙于建立表格。py并将其与我的模板集成。我在网上获得的各种教程的帮助下完成了所有必需的工作,但我无法在HTML页面上看到我在表单中声明的字段。下面是我用于每个模块的代码。如果有人能帮我解决这个问题就太好了。

    型号.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)
    

    视图.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)
    

    表格.py

    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>
    

    项目.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页面上的“注册”按钮中看到的全部内容。姓名、电子邮件和联系电话的三个文本字段缺失。请告诉我我在这里错过了什么。

    2 回复  |  直到 9 年前
        1
  •  0
  •   César    9 年前

    您忘记将表单添加到上下文中:

    def register(request):
        ...
        return render_to_response('ComingSoon.html', {'success':success, 'form': form}, context)
    
        2
  •  0
  •   sentient    9 年前

    也许你应该这样写表格:

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

    更容易、更简单。既然您使用了模型中的所有属性,那么不妨直接将表单与模型连接起来。

    Csar Bustos说得对。您没有在模板的上下文字典中添加表单。