在Django
我试图呈现checkboxes
列表,其中的选项是从模型字段中的值填充的。以下是我到目前为止的情况:
模型
#Model that feeds the list of checkboxes
class Category_Level1(models.Model):
category_level1_name = models.CharField(max_length = 50)
形式
class ProductCategoryLevel1Form(forms.Form):
product_category_level1 = forms.MultipleChoiceField(label = "Product Category", choices = Category_Level1.objects.all(), widget = forms.CheckboxSelectMultiple)
视图
def select_product(request):
product_category_level1 = ProductCategoryLevel1Form()
if request.method == 'POST':
product_category_level1_form = ProductCategoryLevel1Form(request.POST)
if product_category_level1_form.is_valid():
product_category_level1_list = product_category_level1_form.cleaned_data.get('product_category_level1', 'Unk')
# Saving the selected categories to another table
product_cat_obj = Product_Category_Level1(category_level1_name = product_category_level1_list)
product_cat_obj.save()
context = {
'product_category_level1' : product_category_level1
}
return render(request, 'select_product/select.html', context)
模板
<div class="row">
<label for="id_prod_category"></label>
{% product_category_level1 %}
</div>
我收到以下错误:
第23行的无效广告代码:&quot; product_category_level1&#39;,预计 &#39;端嵌段&#39 ;.您是否忘记注册或加载此标记?
我做错了什么?
感谢任何建议。
答案 0 :(得分:0)
Django使用两种类型的标记 - tags {% ... %}
和variables {{ ... }}
。
在此代码中,您尝试呈现product_category_level1
变量,因此您应该在模板中使用{{ product_category_level1 }}
而不是{% product_category_level1 %}
。
但是,此代码中还存在其他一些错误。
product_category_level1
和product_category_level1_form
。这些都应该是相同的变量。您需要使用相同的变量,因此在绑定POST数据并调用is_valid()时,您向用户显示的表单包含任何验证错误。正如您目前拥有它一样,您总是向用户提供表单的新实例 - 如果任何数据验证失败,表单将再次显示,所有字段都为空,没有错误消息。p
标记,li
标记等。因此,您需要添加方法调用{{1}像这样:as_p
。可以在此处找到更多渲染选项:https://docs.djangoproject.com/en/1.10/topics/forms/#working-with-form-templates