2016-09-20 123 views
0

我跟着一本书学习Django,但现在我卡住了,因为我不能呈现我应该的文本字段。我使用的是Django版本1.9,通常在Firefox上呈现。输入文本字段不显示在浏览器上 - Django

我的Django 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()) 

我有这两个HTML文件:base.html文件和profile.html

<!DOCTYPE html> 
    {% load static from staticfiles %} 
<html> 


<head> 
    <link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet"> 
    <link href="{% static 'js/bootstrap.min.js' %}" rel="stylesheet"> 

</head> 

<body> 
    <nav class="navbar navbar-fixed-static navbar-default" role="navigation"> 
     <a class="navbar-brand" href="#">MyTweets</a> 
     <p class="navbar-text navbar-right container-fluid">User Profile Page</p> 
    </nav> 

    <div class="container"> 
     {% block content %} 
     {% endblock %} 
    </div> 

    <nav class="navbar navbar-default navbar-fixed-bottom" role="navigation"> 
     <p class="navbar-text navbar-right">Footer </p> 
    </nav> 
    <script src="{% static 'js/bootstrap.min.js' %}"></script> 
</body> 
</html> 



<!DOCTYPE html> 
<!--esse extends significa que ele vai entrar no bloco definido no arquivo base.html--> 
<!-- primeiro esse profile era apenas pra mostrar os twitters, mas depopis adicionamos o campo de 

adicionar um novo twitter, utilizando form, que foi feito no aqquivo <forms class="py"></forms>--> 
{% extends "tweets/base.html" %} 

<!--definicao dos blocos, ou seja, tera o mesmo header, body ..., o que muda eh o content-->  
{% block content %} 
<div class="container" class="row clearfix"> 
    <div class="col-md-12 column"> 
    <!--Form para um novo twitter--> 
     <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> 

    <!--loop que mostra os tweets--> 
    <div class="col-md-12 column"> 
     <!-- ver a logica disso no views--> 
     {% for tweet in tweets %} 
     <!-- a classe well ou wellbox, da o efeito de insercao--> 
     <div class="well"> 
      <span>{{tweet.text}}</span> 
     </div> 
     {% endfor %} 
    </div> 
</div> 
{% endblock %} 

因此,渲染这个结果是下面的图片:

enter image description here

+0

你指的是这个 - >''输入字段在**​​ profile.html ** ??因为我没有看到任何其他'input'标签。如果这是您所指的“输入”标记,那么它在您的页面上显示为一个**按钮**,其** **后**被写入。如果您希望它是文本输入,请将输入标记的类型更改为文本而不是提交。像这样 - >' –

+0

表单,文本是一个在我的forms.py中定义的小部件... –

+0

另外这与Django无关。它是HTML的一部分。所以从技术上讲,你链接到你的这个问题的标签是不正确的。 –

回答

1

好吧,让Django不允许你添加attrs表格字段为forms.Form

要么您需要使用ModelForm。事情是这样的:

from django import forms 

class MyForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
     widgets = { 
      'text': forms.Textarea(attrs={'rows':1, 'cols':85}), 
     } 

但对你的使用情况,我会建议使用像这样在你的模板https://pypi.python.org/pypi/django-widget-tweaks包:

所以首先pip install django-widget-tweaks

现在添加Django的部件,调整installed_apps in settings.py like this:

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'widget_tweaks', 
) 

现在使用它们离子你的模板是这样的:

{% load widget_tweaks %} 
... 
{{ form.text|attr:"rows:1"|attr:"cols:85" }} 

请参阅本 - >How can i set the size of rows , columns in textField in Django Models