无法在模板中渲染django表单

时间:2016-08-01 11:06:21

标签: python django django-forms django-templates

阅读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变量未通过上下文传递或我无法解释的事情发生。对此的任何想法将不胜感激。再次感谢。

2 个答案:

答案 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将成功呈现。

相关问题