2017-12-23 1 views
0

so dass ich einige Recherchen tat, konnte aber nicht die Antwort auf meine speziellen Thema finden ... Was passiert ist, dass:Problem mit Django Template for-Schleife

Ich habe ein Modell namens Abschnitt, der SECTION_TITLE Feld haben. Dieses Feld kann Leerzeichen enthalten, zum Beispiel: "Erster Abschnitt".

Als ich das Django passieren, ich bin den Raum in Python zu entfernen mit replace(), und erstellt einen Filter auf Django, die auch den Raum wie so entfernt:

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

Dann auf meiner Vorlage:

Das Problem ist, dass Unterabschnitt als jedes Zeichen von section_title angezeigt wird, anstelle der Liste, die section_title verweist. Hier wird das Wörterbuch auf die Vorlage übergeben wird:

{ 'Abschnitte': [< Rubrik: Erster Abschnitt>, < Rubrik: Zweiter Abschnitt>], 'FirstSection': [< Unterabschnitt: Unterabschnitt 1>, < Abs : Unterabschnitt 2>], 'SecondSection': [< Unterabschnitt: BLA1->], 'testete': [ '1', '2', '3']}

Wenn ich hart codieren:

{% for subsection in FirstSection %} 

Es funktioniert ...

Irgendwelche Ideen? Vielen Dank!

OBS: Ich entfernte die Leerzeichen, weil ich dachte, dass sie das Problem verursachten, aber anscheinend nicht. Es war nicht so gut mit den Räumen arbeiten ...

Voll Template-Code:

{% 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 %} 

Modelle:

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, 
    ) 
+0

Ich glaube, was Sie verfolgen, ist die einzige Lösung. –

+0

@AnupYadav, sorry, ich habe nicht verstanden, was du meintest. – GuiFGDeo

+0

können Sie zeigen, welche Kontextvariable Sie aus Ihrer Sicht übergeben? –

Antwort

1

Sie wollen einen related_name auf Fremdschlüssel einzurichten, so dass Sie können alle Unterabschnitte abrufen, die dem Abschnitt entsprechen.

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, 
    ) 

Und dann können Sie Ihre Template-Code in einer Schleife über Ihre Unterabschnitte wie folgt ändern:

{% 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 %} 

Siehe https://docs.djangoproject.com/en/1.11/topics/db/queries/#related-objects für weitere Informationen.

+0

Ja, ich möchte den "Ignorieren" Teil Ihres Kommentars machen. Der Abschnitt ist jedoch ein foreign_key des Unterabschnitts, was bedeutet, dass der Abschnitt nicht weiß, welche Unterabschnitte er hat ... Nur Unterabschnitte wissen, dass es ein Kind eines bestimmten Abschnitts ist ... Müsste ich in diesem Fall unbedingt meine Modelle ändern? – GuiFGDeo

+0

Ich werde die Modelle zur Fragebeschreibung hinzufügen – GuiFGDeo

+0

Hmmm entschuldigen Sie, ich war nicht ganz klar. Können Sie Ihre Frage mit dem Code für das Schnittmodell bearbeiten? – kshikama