Django Template for loop

时间:2017-12-23 05:48:16

标签: python html django templates

所以我做了一些搜索,但无法找到我特定问题的答案......发生的事情是:

我有一个名为section的模型,它有section_title字段。该字段可以包含空格,例如:"第一部分"。

当我将它传递给Django时,我使用replace()删除Python中的空格,并在Django上创建了一个过滤器,它也删除了这样的空格:

@register.filter(name='replace_char')
def replace_char(value, arg):
    return value.replace(arg, '')

然后在我的模板上:

{% for subsection in section.section_title|replace_char:" " %}

问题是子节显示为section_title中的每个字符,而不是section_title引用的列表。这是传递给模板的字典:

{'部分':[<部分:第一部分>,<部分:第二部分>],' FirstSection':[<小节:小节1>,<小节:第2小节>],' SecondSection':[<小节:Bla1>],' teste':[' 1',' 2',' 3']}

如果我硬编码:

{% for subsection in FirstSection %}

它有效......

有什么想法吗?谢谢!

OBS:我删除了空格,因为我认为它们导致了问题,但显然没有。它也没有与空间合作......

完整的模板代码:

{% for section in sections %}
    <div class="sectionHeader">
        {{ section.section_title }}
    </div>
    <div class="forumSection">
    {% for subsection in section.section_title|replace_char:" " %}
        <div>
            {{ subsection }}
        </div>
    {% endfor %}
    </div>
{% endfor %}

型号:

class Section(models.Model):
    def __str__(self):
        return self.section_title
    section_title   = models.CharField(primary_key = True, unique = True, max_length = 50)
class Subsection(models.Model):
    def __str__(self):
        return self.subsection_title
    subsection_title    = models.CharField(max_length = 50)
    subsection_section  = models.ForeignKey(
                        'Section',
                        on_delete = models.CASCADE,
    )

1 个答案:

答案 0 :(得分:1)

您想在外键上设置related_name,以便您可以获取与该部分对应的所有子部分。

class Section(models.Model):
    section_title   = models.CharField(primary_key = True, unique = True, max_length = 50)
class Subsection(models.Model):
    subsection_title    = models.CharField(max_length = 50)
    subsection_section  = models.ForeignKey(
                        'Section',
                        related_name = 'subsections',
                        on_delete = models.CASCADE,
    )

然后您可以更改模板代码以循环遍历子部分,如下所示:

{% for section in sections %}
    <div class="sectionHeader">
        {{ section.section_title }}
    </div>
    <div class="forumSection">
        <div>
            {% for subsection in section.subsections.all %}
                {{ subsection.subsection_title }}
            {% endfor %}
        </div>
    </div>
{% endfor %}

有关详细信息,请参阅https://docs.djangoproject.com/en/1.11/topics/db/queries/#related-objects