Ответ 1
Из-за изменение тега url
, принятое в версии 1.3:
Изменения в
url
иssi
Большинство тегов шаблонов позволят вам передать либо константы, либо переменные в качестве аргументов - например:
{% extends "base.html" %}
позволяет указать базовый шаблон как константу, но если у вас есть переменная контекста
templ
, которая содержит значениеbase.html
:{% extends templ %}
также является законным.
Однако из-за аварии истории
url
иssi
отличаются. Эти теги используют второй, quoteless синтаксис, но интерпретируют аргумент как константу. Это означает, что нельзя использовать переменную контекста в качестве цели тегаurl
иssi
.Django 1.3 означает начало процесса исправления этой исторической аварии. Django 1.3 добавляет новую библиотеку шаблонов -
future
-, которая предоставляет альтернативные реализации тегов шаблонаurl
иssi
. Эта реализация библиотекиfuture
реализует поведение, которое делает обработку первого аргумента совместимым с обработкой всех других переменных. Итак, существующий шаблон, содержащий:{% url sample %}
следует заменить на:
{% load url from future %} {% url 'sample' %}
Теги, реализующие старое поведение, устарели, а в Django 1.5 старое поведение будет заменено новым поведением. Чтобы обеспечить совместимость с будущими версиями Django, существующие шаблоны должны быть изменены для использования новых
future
библиотек и синтаксиса.