Django 表单文本区域未出现在模板中

Django form textarea doesn't appear in template

我是 Django 的新手,我正在尝试创建一个表单。问题是,当我呈现表单时,文本字段没有出现,但按钮出现了。

该项目是一个类似 Twitter 的应用程序,表单是用户将文本放入然后 post 的地方。

forms.py:

from django import forms

class TweetForm(forms.Form):
     text = forms.CharField(widget=forms.Textarea(attrs={'rows': 1, 'cols': 85}), max_length=160)
     country = forms.CharField(widget=forms.HiddenInput())

view.py:

class PostTweet(View):
    def post(self, request, username):
        form = TweetForm(self.request.POST)
        if form.is_valid():
            user = User.objects.get(username=username)
            tweet = Tweet(text=form.cleaned_data['text'], user=user, country=form.cleaned_data['country'])
            tweet.save()
            words = form.cleaned_data['text'].split(" ")
            for word in words:
                if word[0] == "#": #Separamos todas las letras del tweet y si empieza con #, se va a crear un hashtag de esa palabra
                    hashtag, created = HashTag.objects.get_or_create(name=word[1:])
                    hashtag.tweet.add(tweet)
        return HttpResponse('/user/' +username)

model.py:

class HashTag(models.Model):
    #HashTah Model:
    name = models.CharField(max_length=64, unique=True)
    tweet = models.ManyToManyField(Tweet)

    def __unicode__(self):
        return self.name

模板:

{% extends "base.html" %}


{% block content %}

<div class="row clearfix">
    <div class="col-md-12 column">
       <form method="post" action="post/">{% csrf_token %}
            <div class="col-md-8 col-md-offset-2 fieldWrapper">
               {{ form.text.errors }}
               {{ form.text }}
            </div>
           {{ form.country.as_hidden }}
           <div>
               <input type="submit" value="Post">
           </div>
        </form>
    </div>
    <h3>&nbsp;</h3>
    <div>
        {% for tweet in tweets %}
        <div class="well">
            <span>{{ tweet.text }}</span>
        </div>
        {% endfor %}
    </div>
</div>
{% endblock %}

模板图片: enter image description here

尝试添加 class,格式 class,

class PostTweet(View):
    form_class = TweetForm

    def post(self, request, username):
        form = TweetForm(self.request.POST)
        if form.is_valid():
            user = User.objects.get(username=username)
            tweet = Tweet(text=form.cleaned_data['text'], user=user, country=form.cleaned_data['country'])
            tweet.save()
            words = form.cleaned_data['text'].split(" ")
            for word in words:
                if word[0] == "#": #Separamos todas las letras del tweet y si empieza con #, se va a crear un hashtag de esa palabra
                    hashtag, created = HashTag.objects.get_or_create(name=word[1:])
                    hashtag.tweet.add(tweet)
        return HttpResponse('/user/' +username)
  1. 问题是您没有将表单传递到模板中。您可以通过在视图中继承 get_context_data 方法来实现。

  2. FormView代替简单的View,定义form_classtemplate_name,就可以了。如果需要,请使用 form_validform_invalid 方法来处理有效和无效响应,而不是 post 方法。由于您正在使用 ModelForm,因此您可以省略所有方法并使此视图尽可能简单,只需向其中添加 success_url 属性。

请阅读有关 ClassBased 视图的信息,并深入研究 FormView。会有帮助:)

您必须使用 context_processors。下面是我对上下文处理器的使用 我的网站之一。

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, "templates")],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
            '**newsletter.context_processors.form_signup**'
            ],
        },
    },
]

context_processors.py(在我的时事通讯应用程序中)

from .forms import SignUpForm

def form_signup(request):

    context = {'form_signup': SignUpForm()}
    return context

现在您的 {{ form_signup }} 应该出现在任何模板上。