2010-06-16 1 views
17

Что я хотел бы сделать (для виджета последних изменений - не виджет django в этом случае) передает URL-адрес в мой шаблон в качестве переменной, а затем использует его например: {% url sitechangeobject.urlname %} Где urlname - строка, содержащая действительное имя для URL-адреса.Передача переменной urlname в тег url в шаблоне django

Возможно ли это? Шаблон продолжает ломаться, говоря, что он не может найти sitechangeobject.urlname как имя (что совершенно правильно, его не существует). Есть ли способ заставить его заглянуть внутрь этой переменной?

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

Спасибо!

ответ

27

на Django 1.3 {% url %} тег правильно поддерживает:

{% url view_name_variable %} 
{% url 'view_name_string' %} 

... это поведение по умолчанию в Django 1.5.

Раньше у вас была только возможность сделать это:

{% url view_name_string %} 

Чтобы получить тег, чтобы работать таким образом в Django 1.3 и 1.4 проектов, вам потребуется следующую строку в верхней части каждого шаблона вы используете его в:

{% load url from future %} 

Согласно Django 1.3 release notes:

... в Django 1.5, старое поведение будет заменено на новое поведение. Чтобы обеспечить совместимость с будущими версиями Django, существующие шаблоны должны быть изменены для использования новых будущих библиотек и синтаксиса.

Учтите, что поддержка в {% load url from future %} была удалена в Django 1.9.

+0

Как бы переменная быть сцеплены в строку суффикса для формирования url? Что-то вроде '{% url variable-auffix '%}', что, конечно, не работает. – Romildo

+1

Кажется немного странным для меня, но я думаю, вы могли бы использовать фильтр '| add'. т.е.: '{% url variable | add: '- suffix'%}' См. [добавить документы фильтра] (https://docs.djangoproject.com/en/1.4/ref/templates/builtins/?from=olddocs# Добавить). – meshy

8

Примечание: этот ответ действительно имеет отношение только к версиям django до 1.3. Если вы используете django 1.3 или новее, необходимая функциональность встроена - см. meshy's answer.

Встроенный url тег не может этого сделать. Однако django-reversetag делает именно это (и многое другое).

Согласно ридми, то reverse тег обеспечивается этим кодом обеспечивает:

  • Последовательный синтаксис («строковые литералы» и переменные)
  • Возможность обратного имена просматривать хранящиеся в переменных контекста
  • Частичные реверсивный
1

Если вы используете Django 1.5 и выше, django-reverseetags больше не требуется, просто передавая имена имен в качестве переменных в шаблоны, которые будут использоваться в теге url.

Я был в замешательстве с наличием джанго-реверсажей, просто подумал о том, чтобы правильно обновить этот вопрос.

+0

Это не требуется в 1.3 и выше. Просто используйте '{% load url from future%}' – meshy

2

для django 1.5 может быть это полезно

обычно, чтобы получить доступ к переменной, переданной из поля зрения мы используем {{переменная}}

однако, для URL в шаблоне, следующий не работает: {% URL 'приложение: пространство имен' {{varible}}%}

просто использовать следующее хорошо: {% URL 'приложение: пространство имен' varible%}