Когда я иногда читаю код django, я вижу в некоторых шаблонах "load url from future". Я не совсем уверен, что это такое, но я знаю, что это имеет какое-то отношение к URL-адресам. Как и когда этот URL-адрес нагрузки из будущего предполагается использовать?
Что такое "URL-адрес загрузки из будущего" в Django
Ответ 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
библиотек и синтаксиса.
Ответ 2
Я поставлю это в отдельный ответ из-за следующего существенного Исключения в связи с шаблонами:
Если вы получаете исключение django.core.urlresolvers.NoReverseMatch
, исключенное из парсера django template (Django version > 1.4), это может быть просто использование {% load url from future %}
в шаблоне.
В этом случае просто укажите URL-адрес, который передается в url-tag. То есть {% url someurl %}
должно стать {% url 'someurl' %}
. Спасибо Ignacio VA за то, что он указал мне в этом направлении.