【发布时间】:2016-12-06 10:33:39
【问题描述】:
阅读doc on django form 后,我尝试构建自己的表单,但表单无法在模板中呈现。我也在 stackoverflow 上遇到过类似的问题,但没有解决方案可以解决我的问题。
我有这个基于模型的简单表格。这是我的代码的 sn-p。
型号:
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)
context 中的键/值对{'form':form} 未正常呈现,这就是{{ form }} 不起作用的原因。但是context 中的任何其他变量都可以正常工作。
这真的让我很困扰,我无法弄清楚为什么上下文不起作用。提前感谢您的任何想法。
附:
我试过这个:
{% if form %} form is true
{% else %} form is false
{% endif %}
在我的 html 模板中,结果是 form is false,这表明 form 变量没有通过上下文传递,或者发生了我无法解释的事情。对此的任何想法将不胜感激。再次感谢。
【问题讨论】:
-
runserver的运行情况如何? -
runserver工作得很好,只是没有呈现表单并且只有一个按钮。
标签: python django django-forms django-templates