2012-06-01 12 views
20

Jestem nowy z django. Utknąłem z problemem porównywania napisów w szablonie.Szablon do porównania Django

mam użytkowania ifnotequal tag porównania ciąg. Ale to nie działa.

muszę spróbować wyjściu zmienną:

{{ request.user.username }} 
{{ article.creator }} 

Tu porównanie:

{% ifnotequal request.user.username article.creator %} 
    {# output something #} 
{% endifnotequal %} 

Ale kiedy robię hardcode: To działa.

{% ifnotequal "justin" "mckoy" %} 
    {# output something #} 
{% endifnotequal %} 

na czym polega problem? Numer article.creator pochodzi z bazy danych, a numer user.username pochodzi z żądania.

Czy ktoś może mi pomóc w tej kwestii?

+0

'article.creator' jest ciągiem też? Czy możesz opublikować model? – yprez

+0

Również w twoim przykładzie jest to "request.user.usname", a nie 'request.user.username'. Typo? – yprez

+0

@Yuri - błąd literowy na moim przykładzie. – justin

Odpowiedz

13

article.creator to User i request.user.username jest ciągiem. Zamiast tego spróbuj porównać request.user.

+3

Gdy dwie rzeczy nie są równe w szablonach Django, często są to typy zmiennych. Zdarza się kilka razy, że próbowałem porównać 1 i "1". –

+0

@Simeon - dzięki, że działa .. :) – justin

+0

będzie również działać, jeśli 'article.creator.username' porównać do' request.user.username' – justin

35

Spróbuj tego:

{% ifnotequal article.creator|stringformat:"s" request.user.username %} 
+4

Ta odpowiedź wymaga więcej głosów! Waliłem głową o ścianę! – pete

+0

Wypisuje się jak ciąg, ale nie jest ciągiem - również dla UUID. – jsbueno

+0

Dziękuję za to, próbowałem odfiltrować zmienną, która była otoczona wieloma białymi spacjami, i to było rozwiązanie – Bwyss

18

Dla porównania ciąg w szablonie używać

{% if name == "someone" %} 
    ............ 
    ............ 
{% endif %} 

i na nierówny

{% if name != "someone" %} 
    ............ 
    ............ 
{% endif %}