【问题标题】:Django Form Fields won't show in my templateDjango 表单字段不会显示在我的模板中
【发布时间】:2018-03-21 16:55:18
【问题描述】:

表单域不会显示在浏览器中。只显示提交按钮。

views.py 代码:

def vote(request, pk):
    # check if request is post
    if request.method == 'POST':
        # create a form and populate it with data from request
        form = forms.Vote(request.POST)
        if form.is_valid():
            fact = Fact.objects.get(pk=pk)
            fact.votes += int(form.cleaned_data['vote'])
            fact.save()
            return HttpResponseRedirect(reverse(
                'facts:detail',
                args=(pk,)
            ))
    else:
        form = forms.Vote()
    return render(request, 'facts/fact_detail.html', {'form': form})

模板(fact_detail.html)代码:

<form method='POST'>
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="vote" />
</form>

表单类(forms.py)代码:

VOTE_CHOICES = [
    (1, 'upvote'),
    (0, 'downvote')
]


class Vote(forms.Form):
    vote = forms.ChoiceField(choices=VOTE_CHOICES,  widget=forms.RadioSelect())

【问题讨论】:

  • print(form) 时看到了什么?你看到表单域了吗?

标签: python django django-forms


【解决方案1】:

我建议检查 django 文档中的通用编辑视图,我认为它有解决方案 [https://docs.djangoproject.com/en/1.11/ref/class-based-views/generic-editing/#createview][1]

【讨论】:

    【解决方案2】:

    views.py 中,vote 方法在本地初始化 form 变量,然后将其作为参数传递。

    def vote(request, pk):
         form=""
        //rest of the code//
           return render(request, 'facts/fact_detail.html', {'form': form})
    

    【讨论】:

    • 在调用 form.is_valid 后尝试打印 form.errors。我怀疑您没有从 request.post 获取数据,否则可能无效。
    • 当我点击提交(投票)按钮时,这会显示在我的终端中:Method Not Allowed (POST): /facts/1/ [10/Oct/2017 13:35:03] "POST /facts/1/ HTTP/1.1" 405 0
    • 能否请您发布您的 URLs.py 文件
    • 这是用于表单# vote url(r'(?P&lt;pk&gt;\d+)/vote/$', views.vote, name='vote'),的投票网址
    • 在 httpResponseredirct 中,您使用的是 'facts:detail' 而不是 '/facts_detail/'
    猜你喜欢
    • 2017-12-15
    • 2011-10-11
    • 2015-08-20
    • 2011-01-15
    • 2013-02-01
    • 2021-09-06
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多