Сложные сравнения по фильтру yesno? - PullRequest
3 голосов
/ 06 декабря 2011

Я совсем новичок в python / django.Мне нравятся шаблоны django, но есть одна повторяющаяся вещь, которую я не могу найти

Мне очень свойственно иметь один условный атрибут для (возможно, длинного) тега HTML.В большинстве случаев это дополнительный класс CSS.

Например, предположим, у вас есть две ссылки для переключения языков, и вы хотите включить только одну ссылку за раз.Я обнаружил, что делаю что-то вроде этого:

{% get_language_info for LANGUAGE_CODE as l %}
<a href="/path/to/switch/to/spanish" 
   class="{% ifequal l.code "es" %} disable {% endifequal %}">
   <img src="/spanish/flag/url" alt="Spanish">
</a>
<a href="/path/to/switch/to/english" 
   class="{% ifequal l.code "en" %} disable {% endifequal %}">
   <img src="/english/flag/url" alt="English">
</a>

Другие примеры могут быть при отображении списка элементов и проверке «выбранного» и т. Д.

На других языках я делал этос троичным оператором, но я знаю, что это считается «злом» в мире python / django: -)

Интересно, есть ли способ использовать фильтр «да»?Я пытался сделать что-то вроде:

{{l.code=="es"|yesno:"disabled,"}}

Но я не мог заставить его работать ... Я что-то упустил?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Проблема заключается просто в вашем синтаксисе в опубликованном вами коде:

{{l.code=="es"|yesno:"disabled,"}}

Это на самом деле обрабатывается как:

{{ l.code=={{"es"|yesno:"disabled,"}} }}

(Примечание: этот код не работает, он просто должен показать, как Django читает его)

Вам нужен пользовательский тег шаблона, который работает как тег шаблона if, но возвращает как фильтр yesno. Вы можете искать что-то вроде djangosnippets.com; может быть, кто-то уже сделал работу за вас. В противном случае я бы посоветовал взглянуть на исходный код Django для этих двоих и попытаться объединить их в свой собственный тег шаблона.

0 голосов
/ 07 декабря 2011

Или вы можете использовать jQuery / javascript для установки класса: http://api.jquery.com/attr/ как то так - не проверял!

{% get_language_info for LANGUAGE_CODE as l %}

<script>
{% if l.code='es' %}
  $('.english').attr('class','disable');
{% else %}
  $('.english').attr('class','disable');
{% endif %}
</script>



<a href="/path/to/switch/to/spanish" 
   id="spanish" class='enable">
   <img src="/spanish/flag/url" alt="Spanish" >
</a>
<a href="/path/to/switch/to/english" 
   id="english" class='enable">
   <img src="/english/flag/url" alt="English">
</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...