Python Django缺少来自集合的标签

Python Django缺少来自集合的标签,python,django,forms,django-forms,Python,Django,Forms,Django Forms,我对Django的学习使我养成了良好的习惯。我已经能够使用我正在阅读的书中的信息创建一个简单的表单。我还根据我创建的模型创建了一个表单。我遇到的问题是,我试图在模板中创建自己的格式,但由于某些原因,标签信息没有保存在表单集中。我对使用默认的显示方式,即{{form}}如何显示这些信息感到有点困惑 我所拥有的 adminforms.py class NewsForm(ModelForm): class Meta: model = News_Article e

我对Django的学习使我养成了良好的习惯。我已经能够使用我正在阅读的书中的信息创建一个简单的表单。我还根据我创建的模型创建了一个表单。我遇到的问题是,我试图在模板中创建自己的格式,但由于某些原因,标签信息没有保存在表单集中。我对使用默认的显示方式,即{{form}}如何显示这些信息感到有点困惑

我所拥有的

adminforms.py

class NewsForm(ModelForm):
    class Meta:
        model = News_Article
        exclude = ('news_datetime_submitted', 'news_yearmonth', )
        labels = {
            'news_title': _('Enter News Title'),
        }
        help_texts = {
            'news_title': _('Enter a title to give a short description of what the news is.'),
        }
        error_messages = {
            'news_title': {
                'max_length': _("News title is too long."),
            },
        }
view.py

def create(request, dataset):
    if dataset not in ['news', 'announcement']:
        # change this to the siteadmin page if authenticated and have permissions, otherwise go to home
        return HttpResponseRedirect(reverse('pages'))
    rDict = {}
    # if this is a POST request we need to process the form data
    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        if dataset == "news":
            form = NewsForm(request.POST)
        elif dataset == "announcement":
            form = AnnouncementForm(request.POST)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required
            # ...
            # redirect to a new URL:
            return HttpResponseRedirect('/home/')
        else:
            pass

    # if a GET (or any other method) we'll create a blank form
    else:
        announcement = get_announcement()
        if not announcement == None:
            rDict['announcement'] = announcement
        if dataset == "news":
            rDict['formset'] = NewsForm()
            rDict['branding'] = {'heading': 'Create News Item', 'breadcrumb': 'Create News', 'dataset': 'create/' + dataset + '/'}
        elif dataset == "announcement":
            rDict['form'] = AnnouncementForm()
            rDict['branding'] = {'heading': 'Create Announcement', 'breadcrumb': 'Create Announcement', 'dataset': 'create/' + dataset + '/'}
        rDict['sitenav'] = clean_url(request.path, ['"', "'"])
        rDict['menu'] = Menu.objects.all().order_by('menu_position')
        pdb.set_trace()
        return render(request, 'en/public/admin/admin_create.html', rDict)
模板

<form action="/siteadmin/{{ branding.dataset }}" method="post">
    {% csrf_token %}
    {{ formset.management_form }}
    {% for form in formset %}
        {% for field in form %}
            {{ field.label_tag }} {{ field }}
        {% endfor %}
    {% endfor %}
    <input type="submit" value="Submit" />
</form>

{%csrf_令牌%}
{{formset.management_form}
{formset%中表单的%s}
{%形式的字段为%}
{{field.label_tag}{{{field}}
{%endfor%}
{%endfor%}
由于某些原因,我们只能获取表单字段,而没有标签信息。注意,我从Django文档中获取的模板文本是关于表单集的

我已经查看了返回的数据,其中没有标签信息,但是它只处理{{form}}?有点困惑

(Pdb) rDict['formset']
<NewsForm bound=False, valid=Unknown, fields=(news_title;news_text;news_active)>
(Pdb)rDict['formset']
提前谢谢各位


Wayne

您正在添加一个名为“formset”的上下文变量,它不是一个formset,而是一个表单:
rDict['formset']=NewsForm()


因此,当将此上下文变量传递到模板时,在formset%}中使用
{%for form进行迭代会产生误导性的效果,即创建名为
form
的变量,该变量实际上是一个表单字段。尝试正确命名(如果您确实想要一个表单集,请按照描述创建一个表单集),看看事情是否开始有意义。

谢谢@david-g。当我试图解决如何在模板中手动创建表单时,我感到困惑。我不需要表单集,也不知道如何访问表单的每个元素。你的意见让我解决了这个问题,谢谢你。我仍然在慢慢地整理我的书(甚至还有那些花时间在这里回复我的人的精彩回复)。没有真正了解Django的亲密朋友可以指导我,所以这个资源非常宝贵。再次感谢:)