Django 从开始缺少标签
Django missing labels fromset
我的 Django 学习让我接触到了 Forms。我已经能够使用我正在阅读的书中的信息创建一个简单的表单。我还根据我创建的模型创建了一个表单。我遇到的问题是,我正在尝试在模板中创建自己的格式,但出于某种原因,标签信息未包含在表单集中。我对如何使用默认方式显示此内容感到有点困惑,即 {{ 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>
出于某种原因,只得到表单域,没有标签信息。 N.b。我从有关表单集的 Django 文档中得到的模板文本。
我查看了返回的数据,其中没有标签信息,但它仅适用于 {{ form }} ?有点困惑。
(Pdb) rDict['formset']
<NewsForm bound=False, valid=Unknown, fields=(news_title;news_text;news_active)>
在此先感谢大家。
韦恩
您正在添加一个名为 "formset" 的上下文变量,它不是一个表单集,它是一个表单:rDict['formset'] = NewsForm()
.
因此,当将此上下文变量传递给模板时,使用 {% for form in formset %}
进行迭代具有创建名为 form
的变量的误导效果,该变量实际上是一个表单字段。尝试正确命名(如果您真的想要一个表单集,请按照描述创建一个 here),看看事情是否开始有意义。
我的 Django 学习让我接触到了 Forms。我已经能够使用我正在阅读的书中的信息创建一个简单的表单。我还根据我创建的模型创建了一个表单。我遇到的问题是,我正在尝试在模板中创建自己的格式,但出于某种原因,标签信息未包含在表单集中。我对如何使用默认方式显示此内容感到有点困惑,即 {{ 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>
出于某种原因,只得到表单域,没有标签信息。 N.b。我从有关表单集的 Django 文档中得到的模板文本。
我查看了返回的数据,其中没有标签信息,但它仅适用于 {{ form }} ?有点困惑。
(Pdb) rDict['formset']
<NewsForm bound=False, valid=Unknown, fields=(news_title;news_text;news_active)>
在此先感谢大家。
韦恩
您正在添加一个名为 "formset" 的上下文变量,它不是一个表单集,它是一个表单:rDict['formset'] = NewsForm()
.
因此,当将此上下文变量传递给模板时,使用 {% for form in formset %}
进行迭代具有创建名为 form
的变量的误导效果,该变量实际上是一个表单字段。尝试正确命名(如果您真的想要一个表单集,请按照描述创建一个 here),看看事情是否开始有意义。