繁体   English   中英

Django 模板 - 使用字符串呈现表单中的字段

[英]Django Template - Render a field from a form using a string

根据 Django 的文档:

我们不必让 Django 解压表单的字段; 如果我们愿意,我们可以手动完成(例如,允许我们重新排序字段)。 每个字段都可用作使用 {{ form.name_of_field }} 的表单属性,并且在 Django 模板中,将被适当地呈现。

伟大的! 我想让它变得更复杂......我想对{{ form."somefield" }}的效果做一些事情,这样我基本上可以这样做:

{% for i in '012345'|make_list %}
  {% with y=forloop.counter|stringformat:"s" %}
  {% with somefield="somefield"|add:y %}
  {{form.somefield}} #either this
  {{form.somefield|add:y}} #this
  {{form.somefield{{i}}}} #this
  {{form.somefield{{forloop.counter}}}} #this
  #or other variations of that
  {% endwith %}
  {% endwith %}
{% endfor %}

基本上,我需要在“somefield”属性的末尾添加一些变量,以便能够引用末尾有数字的字段。

- -编辑 - -

这是用python表示的全表模式

from django import forms


class NewGameForm(forms.Form):
    game_name = forms.CharField(max_length=50, required=True, label="", widget=forms.TextInput(attrs={'placeholder': 'Game Name', 'class': 'has-validation form-control'}))
    category1 = forms.CharField(max_length=25, required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Category 1', 'class': 'form-control mt-1'}))
    category2 = forms.CharField(max_length=25, required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Category 2', 'class': 'form-control mt-1'}))
    category3 = forms.CharField(max_length=25, required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Category 3', 'class': 'form-control mt-1'}))
    category4 = forms.CharField(max_length=25, required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Category 4', 'class': 'form-control mt-1'}))
    category5 = forms.CharField(max_length=25, required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Category 5', 'class': 'form-control mt-1'}))
    category6 = forms.CharField(max_length=25, required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Category 6', 'class': 'form-control mt-1'}))
    q1values = forms.IntegerField(min_value=0, required=False, label="", widget=forms.TextInput(attrs={'placeholder': '200', 'class': 'form-control'}))
    c1q1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c1a1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c2q1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c2a1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c3q1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c3a1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c4q1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c4a1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c5q1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c5a1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c6q1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c6a1 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    q2values = forms.IntegerField(min_value=0, required=False, label="", widget=forms.TextInput(attrs={'placeholder': '400', 'class': 'form-control'}))
    c1q2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c1a2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c2q2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c2a2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c3q2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c3a2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c4q2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c4a2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c5q2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c5a2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c6q2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c6a2 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    q3values = forms.IntegerField(min_value=0, required=False, label="", widget=forms.TextInput(attrs={'placeholder': '600', 'class': 'form-control'}))
    c1q3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c1a3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c2q3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c2a3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c3q3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c3a3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c4q3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c4a3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c5q3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c5a3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c6q3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c6a3 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    q4values = forms.IntegerField(min_value=0, required=False, label="", widget=forms.TextInput(attrs={'placeholder': '800', 'class': 'form-control'}))
    c1q4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c1a4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c2q4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c2a4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c3q4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c3a4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c4q4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c4a4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c5q4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c5a4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c6q4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c6a4 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    q5values = forms.IntegerField(min_value=0, required=False, label="", widget=forms.TextInput(attrs={'placeholder': '1000', 'class': 'form-control'}))
    c1q5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c1a5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c2q5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c2a5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c3q5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c3a5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c4q5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c4a5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c5q5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c5a5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))
    c6q5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Question', 'class': 'form-control mt-1'}))
    c6a5 = forms.CharField(required=False, label="", widget=forms.TextInput(attrs={'placeholder': 'Answer', 'class': 'form-control mt-1 mb-1'}))

给出一些上下文:

"category" + [1, 2, 3, 4, 5, 6] 显然是类别。 “c1q1”是第 1 类问题 1 的缩写。

要了解表格的外观:

q-values Category1 Category2 Category3 Category4 Category5 Category6
q1values c1q1      c2q1      c3q1      c4q1      c5q1      c6q1
q2values c1q2      c2q2      c3q2      c4q2      c5q2      c6q2
q3values c1q3      c2q3      c3q3      c4q3      c5q3      c6q3
q4values c1q4      c2q4      c3q4      c4q4      c5q4      c6q4
q5values c1q5      c2q5      c3q5      c4q5      c5q5      c6q5

通过创建模板标签文件来创建自定义模板标签过滤器。 https://docs.djangoproject.com/en/3.2/howto/custom-template-tags/ ):

<appname>/templatetags/<appname>_extras.py

过滤器有两个参数,表单本身和作为字符串的字段名称。 现在您可以访问字段字典。 但是,请注意必须返回绑定字段。 这可以通过 get_bound_field 函数来完成。 https://docs.djangoproject.com/en/3.2/ref/forms/api/#customizing-boundfield

from django import template

register = template.Library()

@register.filter
def get_field(form, field_name):
    return form.fields[field_name].get_bound_field(form, field_name)

在您的模板中使用它,如下所示:

{% for i in '012345'|make_list %}
    {% with "somefield"|add:i as field_name %}
        {{ form|get_field:field_name }}
    {% endwith %}
{% endfor %}

不要忘记加载您的自定义过滤器:

{% load <appname>_extras %}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM