Python обрабатывает по шаблону для веб-разработчиков

Предикат Capybaras has_select? и have_select matcher ищут элементы HTML <select>. В зависимости от того, что вы подразумеваете под указателем даты, вам нужно будет использовать сопоставление, которое будет соответствовать правильному типу элемента, или have_selector, если нет конкретного сопоставителя. Если то, что вы на самом деле проверяете, является элементом <input type="date"> со связанной меткой, содержащей текст «Дата начала», тогда вы можете использовать сопоставление have_field:

expect(page).to have_field 'Start date', type: 'date'

Если вы используете Rails помощник представления date_select создает HTML, например

<div class="field">
  <label for="post_start_date">Start date</label>
  <select id="post_start_date_1i" name="post[start_date(1i)]">
     <option value="2014">2014</option>
     <option value="2015">2015</option>
     ...
  </select>
  <select id="post_start_date_2i" name="post[start_date(2i)]">
     <option value="1" selected="selected">January</option>
     <option value="2">February</option>
     ...
  </select>
  <select id="post_start_date_3i" name="post[start_date(3i)]">
     <option value="1">1</option>
     <option value="2">2</option>
     <option value="3">3</option>
     ...
  </select>
</div>

Из этого HTML видно, что элемент < label> на самом деле не связан ни с одним из полей формы (атрибут for не делает t соответствовать id), что означает, что вы не сможете сопоставить элементы < select>, используя текст метки. Вместо этого вам нужно будет использовать либо идентификатор, либо имя и сопоставлять их индивидуально

expect(page).to have_select('post_start_date_1i')
expect(page).to have_select('post[start_date(2i)]')
...

, либо вы можете использовать фильтр id с регулярным выражением и счетчиком, чтобы проверить, что есть 3 элемента, совпадающих как [ 1115]

expect(page).to have_select(id: /^post_start_date_[123]i$/, count: 3)

Обратите внимание, что это технически не так «правильно», как делать их по отдельности, так как на самом деле вы можете иметь 3 элемента с идентификатором post_start_date_1i, и он все равно будет проходить, но в этом случае ваш HTML также будет недействительным. 1116]

Если вы проверяете не тот тип HTML-элемента, вам нужно предоставить HTML-код, чтобы получить точный ответ.

5
задан Jason Baker 18 October 2008 в 03:56
поделиться

7 ответов

Взгляд на Мако.

Вот то, как я справляюсь с веб-разработчиками.

  1. Попросите, чтобы они копировали страницу. В HTML.
  2. Используйте HTML в качестве основания для шаблона, заменяя дразнившее содержание ${...} замены.
  3. Сгиб в циклах для обработки повторений.

Использование операторов "if" требует согласования, так как макет является одной версией страницы, и обычно существуют некоторые объяснения условной презентации некоторого материала.

5
ответ дан 18 December 2019 в 06:52
поделиться

Механизм шаблонной обработки Django довольно достоин. Это довольно устойчиво, не ступая на слишком много пальцев ног. Если бы Вы работаете с Python, я рекомендовал бы это. Я не знаю, как развестись с ним от Django, но я сомневаюсь, что это было бы очень трудное наблюдение, поскольку Django является довольно модульным.

Править: По-видимому, мини-путеводитель к использованию автономного механизма шаблонной обработки Django уже находился передо мной, insin спасибо.

6
ответ дан 18 December 2019 в 06:52
поделиться

У меня были хорошие голоса при ответе на дубликат этого того же вопроса.

Мой ответ был:

Jinja2.

Хороший синтаксис, хорошие возможности настройки.

Интегрируется хорошо. Может поиграться в песочнице, таким образом, Вы не должны доверять полностью своим шаблонным авторам. (Мако не может).

Это также довольно быстро с премией компиляции Вашего шаблона к байт-коду, и кэшируйте его, как в демонстрации ниже:

>>> import jinja2
>>> print jinja2.Environment().compile('{% for row in data %}{{ row.name | upper }}{% endfor %}', raw=True) 
from __future__ import division
from jinja2.runtime import LoopContext, Context, TemplateReference, Macro, Markup, TemplateRuntimeError, missing, concat, escape, markup_join, unicode_join
name = None

def root(context, environment=environment):
    l_data = context.resolve('data')
    t_1 = environment.filters['upper']
    if 0: yield None
    for l_row in l_data:
        if 0: yield None
        yield unicode(t_1(environment.getattr(l_row, 'name')))

blocks = {}
debug_info = '1=9'

Этот код был сгенерирован на лету Jinja2. Конечно, компилятор optmizes это далее (например, удаление if 0: yield None)

6
ответ дан 18 December 2019 в 06:52
поделиться

Для добавления к комментарию @Jaime Soriano Genshi является движком шаблонов, используемым в Trac пост - 0.11. Это, может использоваться в качестве универсального решения для шаблонной обработки, но имеет внимание на HTML/XHTML. Это имеет автоматический выход для сокращения уязвимостей XSS.

2
ответ дан 18 December 2019 в 06:52
поделиться

Я лично нашел, что шаблоны Гепарда были очень благоприятны для разработчика. То, чему требовалось некоторое время, было идеей шаблонного разделения на подклассы, и это было чем-то трудно для получения вначале. Но разработчик создает полный шаблон, копируя его код... Затем можно пойти, очищают вещи немного.

2
ответ дан 18 December 2019 в 06:52
поделиться

Голосование ми переходит к Clearsilver, это - движок шаблонов, используемый в Trac прежде 0.11, он также используется на страницах как Google Groups или Orkut. Основные преимущества этого движка шаблонов - то, что это очень быстро и независимо от языка.

1
ответ дан 18 December 2019 в 06:52
поделиться

Я играл обе роли, и в глубине души я предпочитаю больше языка шаблонной обработки программиста. Однако я, внештатный работник для нескольких графических дизайнеров, делающих "тяжелый подъем", поддержанный и программирование дб и, может сказать Вам, что у меня была лучшая удача с XML шаблонная обработка языков (SimpleTAL, Genshi, и т.д.).

Когда я пытаюсь быть веб-дизайнером, дружелюбным, я ищу что-то, что может быть загружено в DreamWeaver и видеть результаты. Это позволяет мне обеспечивать все рычаги в шаблоне и позволять разработчику настроить его, не волнуя по поводу повреждения, что я уже записал. Это позволяет нам совместно использовать код и работать лучше вместе, где мы оба довольны форматом.

Если разработчик кодирует без WYSIWYG-редактора, я думаю, что Вы - опции, менее ограничены, и Вы могли пойти со своим собственным любимым.

1
ответ дан 18 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: