2010-12-29 13 views
9

Zgodnie z this thread na liście deweloperów django, nie mogę przekazać stałej False jako parametru do znacznika szablonu Django, ponieważ będzie traktowany jako nazwa zmiennej, a nie wbudowany stały.Django niestandardowy znacznik szablonu, który akceptuje parametr boolowski

Ale jeśli chcę utworzyć tag szablonu, potrzebny jest parametr true/false, jaki jest zalecany sposób tworzenia (w języku Python) i wywoływania (w szablonie) tego tagu szablonu?

Mogę po prostu przekazać 1 lub 0 wewnątrz szablonu i będzie działać poprawnie, ale biorąc pod uwagę, że tworzenie szablonów Django nie powinno wymagać znajomości programowania komputerowego (np. 1 == Prawda, 0 == False) twórców szablonów, I zastanawiałeś się, czy istnieje lepszy sposób postępowania z tą sprawą.

Przykład definicji zmiennych i przechowywania:

@register.simple_tag 
def some_tag(some_string, some_boolean = True): 
    if some_boolean: 
     return some_html() 
    else 
     return some_other_html() 

<!-- Error! False treated as variable name in Request Context --> 
{% some_tag "foobar" False %} 

<!-- Works OK, but is there a better option? --> 
{% some_tag "foobar" 0 %} 
+0

patrz również http://stackoverflow.com/questions/4229327 – mpen

Odpowiedz

15

I pojawiły się na tego problemu jednocześnie temu i dochodzi do wniosku, że przy użyciu 1 i 0 ° najprostszym rozwiązaniem.

Jednak pomysł może być dodanie procesora kontekstu, który dodaje True i False do kontekstu szablonu za pomocą odpowiednich nazw:

# projectname/appname/context_processors.py 

def booleans(): 
    return { 
     'True': True, 
     'False': False, 
    } 

Potem oczywiście trzeba by dodać, że procesor kontekstowe w pliku ustawień Django:

TEMPLATE_CONTEXT_PROCESSORS += { 
    'projectname.appname.context_processors.booleans', 
} 
+0

Och, to jest fajne. Chciałbym, żeby ktoś zasugerował to na moje pytanie: P – mpen

+1

Prawdopodobnie będę też trzymał 1 i 0, ale wiedza o rozwiązaniu procesora kontekstowego będzie pomocna w przyszłości. dzięki! –

Powiązane problemy