【问题标题】:DJango - My forms.py elements are not showing up in the html templateDJango - 我的 forms.py 元素未显示在 html 模板中
【发布时间】:2015-09-02 12:01:33
【问题描述】:

我是 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)

forms.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>

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 页面上的“注册”按钮中看到所有内容。姓名、电子邮件和联系电话三个文本字段丢失。请让我知道我在这里缺少什么。

【问题讨论】:

  • 似乎您没有将表单传递给您的上下文:{'sucess': success, 'form': form}
  • 您的模板中还有一个评论标签 (&lt;!--),但如果这是问题所在,您甚至不应该看到注册按钮,所以也许这正是 César 所说的。
  • 非常感谢 César,它成功了..!!我该死的确定这将是我会错过的一些愚蠢的事情。您可以添加您的评论作为答案,以便我投票。
  • 你不能投票stackoverflow.com/help/privileges/vote-up =) 现在只能接受

标签: python django django-models django-forms django-templates


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    也许您应该尝试这样编写表单:

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

    更容易和更简单。既然你在使用模型中的所有属性,不妨直接将表单与模型连接起来。

    César Bustíos 说得对。您没有在模板的上下文字典中添加表单。

    【讨论】:

    • 感谢 Sentient 的建议。我肯定会在我的项目中使用它。是的,César Bustíos 解决方案奏效了 :)
    猜你喜欢
    • 2011-03-05
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2018-12-11
    • 2015-11-09
    • 2013-06-23
    相关资源
    最近更新 更多