Как проверить HTML в шаблонах Django во время процесса разработки?
Я еще не использовал Django и Python, встроенные в возможности тестирования, но я хочу, наконец, начать... И одна из самых очевидных вещей, которые я бы хотел проверить во время всего процесса разработки, это то, что все мои страницы проверяются во всех возможных сценариях.
Какой лучший способ сделать это?
Ответы
Ответ 1
Хороший вопрос. Я не сделал этого сам, поэтому, надеюсь, будут какие-то более эффективные ответы, но вы можете захотеть изучить промежуточное ПО для проверки HTML:
"во всех возможных сценариях" может быть слишком много, чтобы просить, в зависимости от вашего приложения. Например, если вы сделаете следующий Facebook и, таким образом, ежедневно принимаете огромное количество пользовательских данных, в какой-то момент произойдет что-то, что нарушит правильность страницы на вашем сайте.
Поскольку ошибки проверки не способствуют разрушению функциональности, это может быть приемлемый подход для проверки с некоторыми ограниченными тестовыми данными, а затем реагировать на ошибки по мере их появления. Я считаю, что это известно как тестирование с глупостью.
Ответ 2
В качестве альтернативы, ваш собственный подход к проверке страниц на вашем сайте во время обычного процесса тестирования будет выглядеть примерно так:
Не уверен, что кто-либо выполнил какую-либо работу над этим, можно использовать повторно.
Ответ 3
Одним из решений является создание script, который отображает все шаблоны на основе входного словаря переменных значений переменных.
Основная логика для получения списка переменных, определенных в шаблонах, следующая:
from django.template.loader import get_template
def extract_required_vars(node):
if not hasattr(node, 'nodelist'):
return []
var_names = []
for child_node in node.nodelist:
if isinstance(child_node, VariableNode):
var_names.append(child_node.filter_expression.token)
elif isinstance(child_node, ForNode):
var_names.append(child_node.sequence.var.var)
elif isinstance(child_node, ExtendsNode):
template = get_template(child_node.parent_name.var)
var_names.extend(extract_required_vars(template))
elif isinstance(child_node, IncludeNode):
template = get_template(child_node.template.var)
var_names.extend(extract_required_vars(template))
var_names.extend(extract_required_vars(child_node))
return var_names
required_vars = extract_required_vars(get_template('index.html'))
Затем script проверяет, что переменные, определенные в шаблонах, находятся либо в настройках проекта, либо в dict, предоставленном пользователем в качестве тестового ввода.
/path/to/project/templates/templates/allusers.html
-> ok: users, STATIC_URL
/path/to/project/templates/entrer-en-contact.html
-> ok: contactform, STATIC_URL
/path/to/project/templates/dest-summary.html
-> ok: STATIC_URL
-> missing: dest_username
Подробнее в этом сообщении в блоге.