输入文本字段不显示在浏览器上 - Django
问题描述:
我跟着一本书学习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> </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 %}
因此,渲染这个结果是下面的图片:
答
好吧,让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
你指的是这个 - >''输入字段在** profile.html ** ??因为我没有看到任何其他'input'标签。如果这是您所指的“输入”标记,那么它在您的页面上显示为一个**按钮**,其** **后**被写入。如果您希望它是文本输入,请将输入标记的类型更改为文本而不是提交。像这样 - >' –
表单,文本是一个在我的forms.py中定义的小部件... –
另外这与Django无关。它是HTML的一部分。所以从技术上讲,你链接到你的这个问题的标签是不正确的。 –