阅读doc on django form之后,我尝试构建自己的表单,但表单只是在模板中呈现。我也在stackoverflow上遇到了类似的问题,但没有解决方案可以解决我的问题
我有这个基于模型的简单形式。这是我代码的片段。
模特:
class Tweet(activity.Activity, models.Model):
user = models.ForeignKey('auth.User')
text = models.CharField(max_length=160)
created_at = models.DateTimeField(auto_now_add=True)
#...
表格:
class TweetForm(ModelForm):
#text = forms.CharField(label = 'Tweet', max_length = 100)
class Meta:
model = Tweet
fields = '__all__'
观点:
def user(request, user_name):
if not request.user.is_authenticated():
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
form = TweetForm()
user = get_object_or_404(User, username=user_name)
feeds = feed_manager.get_user_feed(user.id)
activities = feeds.get(limit=25)['results']
activities = enricher.enrich_activities(activities)
context = {
'activities': activities,
'user': user,
'login_user': request.user,
'form': form
}
return render(request, 'look/user.html', context)
html:
<form action="" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Tweet" />
实际上,我可以在python shell中呈现表单,因此表单没有任何问题。但是,我发现问题出在这里:
form = TweetForm()
#...
context = {
'activities': activities,
'user': user,
'login_user': request.user,
'form': form #see although the form is passed to the context,
} #I can`t access variable form in the html
return render(request, 'look/user.html', context)
{'form':form}
中的键/值对context
未正常呈现,这就是{{ form }}
无效的原因。但是context
中的任何其他变量都可以正常工作
它真的困扰我,我无法弄清楚为什么上下文不起作用。提前感谢任何想法
附:
我试过这个:
{% if form %} form is true
{% else %} form is false
{% endif %}
在我的html模板中,结果为form is false
,表示form
变量未通过上下文传递或我无法解释的事情发生。对此的任何想法将不胜感激。再次感谢。
答案 0 :(得分:0)
我在模板中使用循环渲染了我的表单:
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in form.visible_fields %}
{{ field.errors }}
{{ field.help_text }}
{{ field }}
<br/>
<br/>
{% endfor %}
这会在我的项目中正确显示表单。
答案 1 :(得分:0)
我终于发现了什么问题......而且它有些愚蠢。我实际上在另一个函数中渲染了user.html
,所以我在方法user
中所做的任何事情都不起作用。在 right 视图方法中实例化form
实例后,TweetForm
将成功呈现。